我为这个模块编写了一个单元测试,并希望存储来自应用程序控制器的current_account
变量。
(它在应用程序控制器中编写的全局方法)
Module Foo
def querying_result(criteria)
User.find_by_account(current_account).where(criteria: criteria)
end
end
我尝试了以下
Foo.stubs(current_account: @user.account).returns(@user.account)
Foo.any_instance.stub(current_account:@user.account).and_return(@user.account)
我的测试文件
class FooTest << ActiveSupport::TestCase
context "querying the result"
setup do
@user = User.first
end
should "return all users" do
users = querying_result(criteria)
assert_equal users.count, 1
end
end
我在这里错过了什么?
答案 0 :(得分:0)
从我看到Foo
模块可能直接包含在FooTest中。
这很奇怪,但为了使它成功,你应该(只能猜测)存根self
而不是Foo
(self.stubs...
)。
但这不是你应该如何测试模块的。
IMO应测试包含此模块的类。如果您不想将测试与任何特定课程联系起来 - 请在规范中创建一个。
@dummy_class = Class.new do
include Foo
def initialize(current_account)
@current_account = current_account # you can control this now by injecting the account on object creation
end
attr_accessor :current_account
end
并在测试
之类的东西@foo = @dummy_class.new(@user)
assert_equal(@foo.querying_result(criteria).count, 1)
您也可以跳过initialize
部分,只删除@foo
对象。