2016-09-15 68 views
0

我们的测试套件存在问题。之前创建的RSpec记录(:suite)如何追踪这条记录?

每当整个套件启动时,就会创建一个零散的记录。

每当我运行一个文件或规范的上下文,这个流浪记录不会被创建。

我在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,预rails_helper.rb)和注释掉每一份支持文件,没有运气。

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

我想知道的是:

  • 我如何铲球打破套房启动?
  • 我刚开始可以回溯我的测试套件吗?
  • 任何人都成功追赶RSpec中的这种持久记录?

编辑

我加config.before(:suite) { debugger }和记录仍在此之前创建的!

如何进一步细化此代码?

[23, 32] in /Users/yourname/.rvm/gems/[email protected]/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 

回答

2

对于我如何找到持久的记录。记录:

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

在这个测试中,类似于下面的内容:

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

我简单的把代码before(:each)块中,测试正好路过现在这样是我的。

TIL:只要RSpec加载套件,它就会评估不在事务中的所有代码。这就是为什么我不能通过查看创建记录时试图指出有问题的文件。

相关问题