2010-04-23 29 views
4

在我的控制器规范中,我是否有效?对于一些路由测试,(基于瑞安贝茨nifty_scaffold)如下: -有没有办法可以取消any_instance的Mocha桩?

it "create action should render new template when model is invalid" do 
    Company.any_instance.stubs(:valid?).returns(false) 
    post :create 
    response.should render_template(:new) 
end 

这是好的,当我在单独测试控制器。在我的型号中我也有以下内容

it "is valid with valid attributes" do 
    @company.should be_valid 
end 

再一次,当单独测试时,它可以正常工作。如果我为模型和控制器运行spec,问题就来了。模型测试总是失败,因为有效?方法已被剔除。有没有办法让我在控制器测试结束后删除any_instance的残根。

我已经通过以反向字母顺序运行测试来确保模型测试在控制器之前运行,但我真的不喜欢我的测试依赖于序列。

回答

4

您需要手动配置RSpec。

Rspec.configure do |config| 
    ... 

    # == Mock Framework 
    # 
    # If you prefer to use mocha, flexmock or RR, uncomment the appropriate line: 
    # 
    config.mock_with :mocha 
    # config.mock_with :flexmock 
    # config.mock_with :rr 
    # config.mock_with :rspec 
end 

另外,请记住,Rspec提供了自己的方法来模拟一个对象。使用RSpec API或者您将无法从图书馆抽象中受益。 http://rspec.info/documentation/mocks/message_expectations.html

+0

虽然解决方案是正确的,但解释不是。摩卡没有检测到RSpec,但是当按照所述设置RSpec配置时,RSpec在适当的点调用摩卡。 – 2010-09-26 19:33:12

+0

更新了评论。谢谢@floehopper – 2010-09-26 22:02:24

1

贵spec_helper包含

Spec::Runner.configure do |config| 
    config.mock_with :mocha 
end 

随着该rspec的应该拆掉测试之间的嘲弄。

3

我有同样的问题,但没有使用Rspec但正常Test::Unit,实际上ActionController::TestCase

定义的期望在测试中保持活跃。

是否有任何线索如何重置我的期望之间的测试?

  • 红宝石:1.9.2
  • 的Rails:3.0.3
  • 摩卡:0.9.10

更新http://mocha.rubyforge.org/classes/Mocha/ObjectMethods.html#M000009

:我已经与 unstub摩卡方法解决了这个
相关问题