如何确保我的控制器和型号规格与rspec和rails一致?

时间:2012-04-09 19:18:09

标签: ruby-on-rails-3 rspec rspec-rails

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

当我正在使用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

然后我的奶酪模型的规格如下:

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

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

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

是否有任何自动方式来比较我希望在我的控制器测试中使用的方法,以及我在模型测试中实际测试的方法?

1 个答案:

答案 0 :(得分:0)

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

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