lcguida
lcguida

Reputation: 3847

RSpec is Freezing

I have rspec configured installed in my rails app. It was working fine (We are just experimenting with rspec so there's only 2 tests).

They were working fine. Now rspec is freezing when it's going to perform a test using database.

I just freezes. I don't even know were to start looking because there's no error in the output.

Is there a verbose or debugging mode for rspec or someone ever faced this?

I've tried -b but it freezes before can give an error.

Output: (Rspec is configured with --format documentation)

[leandro@machine:~] rspec
User

Than, that's it. It hangs. I has to reset manually the computer twice.

This is the user_spec.rb

require 'spec_helper'

describe User do

  let(:user) { User.create({
    username: "teste",
    email: "[email protected]",
    name: "Teste",
    phone: "123456789",
    password: "123456",
    notes: "Teste"
    }) }
  subject { user }

  it "is invalid without a username" do
    user.username = nil
    is_expected.not_to be_valid
  end
end

And my spec_helper.rb

# This file is copied to spec/ when you run 'rails generate rspec:install'
ENV["RAILS_ENV"] ||= 'test'
require File.expand_path("../../config/environment", __FILE__)
require 'rspec/rails'

Dir[Rails.root.join("spec/support/**/*.rb")].each { |f| require f }

# Checks for pending migrations before tests are run.
ActiveRecord::Migration.maintain_test_schema!

RSpec.configure do |config|
  config.infer_base_class_for_anonymous_controllers = false
  config.order = "random"
  config.color = true
  config.tty = true
  config.formatter = :documentation #:progress, :html, :textmate
  config.expect_with :rspec do |c|
    c.syntax = :expect
  end
end

SOLUTION

It turns out that delayed_job_active_record gem was causing the hanging.

I don't know why, but as @Greg Malcolm I looked into the log/teste.log and rspec was feeezing right after createing the delayed jobs database and setting up a new user.

I've restricted the gem just for development and production enviroment, and it worked!

Upvotes: 5

Views: 10660

Answers (4)

srira
srira

Reputation: 23

I'll just post this link here for anyone else coming here after Rails 7 upgrade.

And also one more notable thing, after Ruby 3.3, if you call sleep with nil, it'll sleep forever instead of returning TypeError

Upvotes: 0

justapilgrim
justapilgrim

Reputation: 6852

You have to check the ./log/test.log file. As this file tends to grow big, use the tail command to read the last n lines.

For example, to read the last 5 lines of the log file, execute the following command:

tail -5 ./log/test.log

In my case, my Google Pub/Sub emulator was hanging.

[ActiveJob] Failing with status #<struct Struct::Status code=4, details="Deadline Exceeded", metadata={}>
[ActiveJob] calling pubsub.googleapis.com:443:/google.pubsub.v1.Publisher/GetTopic

It might also be helpful to use tail -f ./log/test.log, to keep track of the logs while RSpec is running. You can read more about it on "Tail Your Test Logs", by thoughtbot.

Upvotes: 2

hoblin
hoblin

Reputation: 729

It's pretty old question but in case anybody else will get this. I've got the same strange Rspec behaviour today because of left --drb option in project .rspec file after removing DRb server (spork or zeus). Just make sure Rspec have DRb disabled if you don't have spork or zeus installed.

Upvotes: 0

Greg Malcolm
Greg Malcolm

Reputation: 3397

I haven't heard of a rake like verbose feature for rspec. But it's probably more useful to look through log/test.log and see what shows up there. It shows database activity which is part of a freeze effect.

You might also want to rails console into test and make sure your database connection is working right.

Upvotes: 4

Related Questions