看似之前创建的RSpec记录(:套件)如何跟踪此记录?

时间:2016-09-15 17:31:50

标签: ruby-on-rails ruby activerecord rspec-rails rspec2

我们的测试套件有问题。

每当整个套件启动时,都会创建一个迷路记录。

每当我运行单个文件或规范上下文时,都不会创建此杂散记录。

我在spec_helper.rb中写了config.before(:each) { puts "COUNT = #{Model.count}\n" },无论测试运行的顺序如何,这条记录都会以某种方式持续存在。似乎在示例开始之前就已经开始了。

我们为我们的数据库播种,所以我尝试了一个干净的设置。

RAILS_ENV=test rake db:setup
RAILS_ENV=test rake db:seed
echo "Model.count" | rails c test
=> 0

然后每当我运行所有测试时(检查订单并检查before(:all))。

rspec
COUNT = 1
.
COUNT = 1
.
COUNT = 1
.
etc

我仔细检查了spec_helper.rb(RSpec2,pre rails_helper.rb),并且没有运气就注释掉了所有支持文件。

我怀疑此时的代码库,也许是某些奇怪的调用,有人留下了find_or_create,一个奇怪的回调或其他东西,我不知道。

我想知道的是:

  • 如何解决套件启动问题?
  • 我可以在启动时获得测试套件的回溯吗?
  • 有人在RSpec中成功追赶这种持续记录吗?

修改

我添加了config.before(:suite) { debugger }并且在此之前仍然创建了记录!

如何进一步细分此代码?

[23, 32] in /Users/yourname/.rvm/gems/ruby-1.9.3-p327@projectname/gems/rspec-core-2.14.6/lib/rspec/core/command_line.rb
   23          @world.announce_filters
   24
   25          @configuration.reporter.report(@world.example_count, @configuration.randomize? ? @configuration.seed : nil) do |reporter|
   26            begin
   27              @configuration.run_hook(:before, :suite)
=> 28              @world.example_groups.ordered.map {|g| g.run(reporter)}.all? ? 0 : @configuration.failure_exit_code
   29            ensure
   30              @configuration.run_hook(:after, :suite)
   31            end
   32          end
(rdb:1) ModelName.count
1

1 个答案:

答案 0 :(得分:2)

有关我如何找到持久记录的记录:

通过使用before(:suite) { debugger },我删除了记录并运行了整个测试套件,并注意到测试失败。

在此测试中,类似于以下内容:

context "blah" do
    model = FactoryGirl.create(:model)
end

我只是将代码放在before(:each)块中,测试正在通过,现在也是如此。

TIL:每当RSpec加载套件时,它会评估不在事务中的所有代码。这就是为什么我不能通过查看创建记录的时间来确定有问题的文件。