我正在使用MiniTest 2.12.1(Ruby >= 1.9 附带的最新版本的股票测试框架),我不知道如何用它模拟类方法,就像Mocha之类的方法一样, 例如:
product = Product.new
Product.expects(:find).with(1).returns(product)
assert_equal product, Product.find(1)
我已经涉足互联网好几天了,我仍然要找到一个合理的答案。请帮忙?
我正在使用MiniTest 2.12.1(Ruby >= 1.9 附带的最新版本的股票测试框架),我不知道如何用它模拟类方法,就像Mocha之类的方法一样, 例如:
product = Product.new
Product.expects(:find).with(1).returns(product)
assert_equal product, Product.find(1)
我已经涉足互联网好几天了,我仍然要找到一个合理的答案。请帮忙?
如果您坚持使用 2.12.1,这可能对您没有帮助,但看起来他们在 HEAD 中的 minitest/mock 中添加了方法存根。
所以,如果你更新到 minitest HEAD,我认为你可以这样做:
product = Product.new
Product.stub(:find, product) do
assert_equal product, Product.find(1)
end
我所做的是简单地存根类方法并将其替换为我自己的 lambda 函数,这证明调用了原始函数。您还可以测试使用了哪些参数。
例子:
test "unsubscribe user" do
user = create(:user, password: "Secret1", email: "john@doe.com", confirmation_token: "token", newsletter_check: false)
newsletter = create(:newsletter, name: "Learnlife News")
unsubscribe_function = -> (email:) { @unsubscribed_email = email }
Hubspot::Subscription.stub :unsubscribe_all, unsubscribe_function do
get user_confirmation_en_path(confirmation_token: "token")
end
assert_equal @unsubscribed_email, "john@doe.com"
end