1

这可能更像是一个哲学问题,但是...

当我使用 rspec 和 rails 时,我越来越习惯于使用模拟对象和存根将我的控制器测试与我的模型隔离开来,反之亦然。

然而,这让我有一种挥之不去的感觉,即并非所有东西都正确连接。

例如,我可能有一个这样的控制器规范:

it "passes a list of awesome cheeses to the view" do
  Cheese.should_receive(:awesome).and_return( [ ] ) # one method name
  get 'show'
  assigns[:awesome_cheeses].should_not be_nil
end

然后是我的 Cheese 模型的规格,例如:

it "should return a list of awesome cheeses" do
  Cheese.create!(:name => "American", :is_awesome => false)
  Cheese.create!(:name => "Gouda", :is_awesome => true)
  Cheese.awesome_cheeses.should_not be_nil # different method name!
end

如果这两个规范都通过了,我的应用程序仍然会被破坏,因为我在第一个规范中存根的方法与我确保在第二个规范中有效的方法名称不同。

现在,对此的一个答案是“您需要集成测试”,但除非我的集成测试非常彻底,否则我可能会错过像这样的错误。

是否有任何自动化方法可以将我期望在控制器测试中使用的方法与我在模型测试中实际测试的方法进行比较?

4

1 回答 1

0

现在看起来 Rspec 有一个名为rspec-fire的扩展,它声称可以帮助解决这个问题。我还没有尝试过,但想在这里为其他人记录下来。

我也想链接到这个演讲,因为它有一个很棒的标题: http: //www.infoq.com/presentations/integration-tests-scam

于 2013-07-30T18:16:15.823 回答