ruby RSpec正在冻结

uurity8g  于 2023-10-17  发布在  Ruby
关注(0)|答案(4)|浏览(151)

我已经在我的rails应用程序中安装了rspec configured。它工作得很好(我们只是在试验rspec,所以只有2个测试)。
他们工作得很好。现在,当rspec要使用数据库执行测试时,它会冻结。
我只是僵住了。我甚至不知道要不要开始找,因为输出中没有错误。
rspec是否有一个详细或调试模式,或者有人曾经遇到过这个问题?
我试过-B,但它冻结之前可以给予一个错误。
输出:(Rspec配置有--format文档)

[leandro@machine:~] rspec
User

就这样。它挂了。我不得不手动重置电脑两次。
这就是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

我的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

解决方案

原来是delayed_job_active_record宝石导致了绞刑。
我不知道为什么,但是作为@Greg Malcolm,我查看了log/teste.log,在检查了延迟的作业数据库并设置了一个新用户之后,rspec就开始崩溃了。
我已经限制了宝石只是为了开发和生产环境,它的工作!

gopyfrb3

gopyfrb31#

我还没有听说过rspec有类似rake的详细功能。但是,浏览log/test.log并查看其中显示的内容可能更有用。它显示数据库活动,这是冻结效果的一部分。
您可能还希望rails console进入测试,并确保您的数据库连接正常工作。

2izufjch

2izufjch2#

你必须检查./log/test.log文件。由于此文件会变得很大,因此使用tail命令读取最后n行。
例如,要读取日志文件的最后5行,请执行以下命令:

tail -5 ./log/test.log

在我的情况下,我的Google Pub/Sub模拟器挂起了。

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

使用tail -f ./log/test.log可能也很有帮助,可以在RSpec运行时跟踪日志。你可以在thoughtbot的"Tail Your Test Logs"上阅读更多。

a64a0gku

a64a0gku3#

这是一个很老的问题,但如果有人会得到这个。我今天也遇到了同样奇怪的Rspec行为,因为在删除DRB服务器(spork或zeus)后,项目.rspec文件中的--drb选项仍然存在。如果你没有安装spork或zeus,请确保Rspec禁用了DRb。

isr3a4wc

isr3a4wc4#

我面临着同样的问题冻结rspec,但在我的情况下,有2个可能的原因。
考虑以下检查,以分别查找原因并应用解决方案:

检查rails c是否也与rspec .一起沿着冻结
1.测试环境下的数据库迁移:
***检查:**确保测试环境应用了迁移。
*解决方案:

rake db:migrate RAILS_ENV=test

***原因:**过时的测试数据库可能会导致不一致,从而导致冻结。
2.Spring干涉:
*检查:rspec .rails c是否冻结。
***解决方案:**要解决此冻结问题:重置Spring使用:

bin/spring stop

停止Spring后,再次尝试运行rspec .rails c

*原因:停止Spring重置其状态,通常可以解决这些问题。因为当您发出停止Spring的命令时,您实际上是停止了它的进程以及它所保存的任何缓存或预加载的应用程序状态。在Spring遇到冲突或bug的情况下,停止它会重置此预加载状态。下次运行rspec .这样的命令时,Rails将在没有Spring干扰的情况下 Boot ,通常会解决冻结问题。如果您再次启动Spring,它将预加载一个新的状态,理想情况下,该状态应该没有最初导致冻结的有问题的状态。

相关问题