在mocha gem中存在any_instance的范围

时间:2017-04-24 07:42:25

标签: ruby-on-rails minitest stub

我为我的rails应用程序编写了测试用例,以检查用户是否连接到facebook。为此目的,我需要在我的rails应用程序中存根方法,否则它给了我一个错误。 所以我用了

SocialNet::Facebook.any_instance.stubs(:status).returns(true)

如果我在我的测试用例中写过这一行,比如

test 'z' do
   SocialNet::Facebook.any_instance.stubs(:status).returns(true)
   # testing code
end

然后运行命令

  

ruby​​ -I test test / integration / erp_flows_test.rb -n test_z。

然后它工作正常,但如果我放置

SocialNet::Facebook.any_instance.stubs(:status).returns(true)

def self.prepare方法中的 test_helper 文件中的

然后为测试用例运行相同的命令效果很好。但是如果我通过命令ruby -I test test/integration/erp_flows_test.rb在我的文件中运行所有测试用例,那么它就不起作用了。

这是否意味着

  

SocialNet :: Facebook.any_instance.stubs(:status).returns(true)有   仅在测试用例中范围有限?究竟我做错了什么

我使用Minitest进行测试

1 个答案:

答案 0 :(得分:0)

你所回答的问题很难回答。

不清楚您在test_helper.rb中定义的具有prepare类方法的类或模块。您是否确认该方法已被调用?

这是RSpec :: Mock关于使用他们的any_instance存根版本的问题:any_instance。特别是,

  

"使用此功能通常是一种设计气味。可能是您的测试试图做得太多,或者被测对象太复杂了。"

最好有一个实例(不是任何旧版本),并在实例上存根该方法。