RSpec 条看似之前创建的记录(:suite) 我如何追踪这条记录?

RSpec record created seemingly before(:suite) how do I track this record down?

我们的测试套件有问题。

每当整个套件启动时,都会创建一条杂散记录。

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

我在 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,奇怪的回调或其他东西,我不知道。

我想知道的是:

编辑

我添加了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

记录一下我是如何找到持久化记录的:

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

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

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

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

TIL:每当 RSpec 加载套件时,它都会评估所有不在 t运行saction 内的代码。这就是为什么我无法通过查看记录的创建时间来尝试查明有问题的文件。