我已经在我的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就开始崩溃了。
我已经限制了宝石只是为了开发和生产环境,它的工作!
4条答案
按热度按时间gopyfrb31#
我还没有听说过rspec有类似rake的详细功能。但是,浏览
log/test.log
并查看其中显示的内容可能更有用。它显示数据库活动,这是冻结效果的一部分。您可能还希望
rails console
进入测试,并确保您的数据库连接正常工作。2izufjch2#
你必须检查
./log/test.log
文件。由于此文件会变得很大,因此使用tail
命令读取最后n行。例如,要读取日志文件的最后5行,请执行以下命令:
在我的情况下,我的Google Pub/Sub模拟器挂起了。
使用
tail -f ./log/test.log
可能也很有帮助,可以在RSpec运行时跟踪日志。你可以在thoughtbot的"Tail Your Test Logs"上阅读更多。a64a0gku3#
这是一个很老的问题,但如果有人会得到这个。我今天也遇到了同样奇怪的Rspec行为,因为在删除DRB服务器(spork或zeus)后,项目
.rspec
文件中的--drb
选项仍然存在。如果你没有安装spork或zeus,请确保Rspec禁用了DRb。isr3a4wc4#
我面临着同样的问题冻结rspec,但在我的情况下,有2个可能的原因。
考虑以下检查,以分别查找原因并应用解决方案:
检查
rails c
是否也与rspec .
一起沿着冻结1.测试环境下的数据库迁移:
***检查:**确保测试环境应用了迁移。
*解决方案:
***原因:**过时的测试数据库可能会导致不一致,从而导致冻结。
2.Spring干涉:
*检查:
rspec .
和rails c
是否冻结。***解决方案:**要解决此冻结问题:重置Spring使用:
停止Spring后,再次尝试运行
rspec .
或rails c
。*原因:停止Spring重置其状态,通常可以解决这些问题。因为当您发出停止Spring的命令时,您实际上是停止了它的进程以及它所保存的任何缓存或预加载的应用程序状态。在Spring遇到冲突或bug的情况下,停止它会重置此预加载状态。下次运行
rspec .
这样的命令时,Rails将在没有Spring干扰的情况下 Boot ,通常会解决冻结问题。如果您再次启动Spring,它将预加载一个新的状态,理想情况下,该状态应该没有最初导致冻结的有问题的状态。