Ruby:用MiniTest模拟一个类方法?

时间:2012-05-05 19:41:00

标签: ruby mocking minitest

我正在使用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 个答案:

答案 0 :(得分:16)

如果您使用2.12.1,这可能对您没有帮助,但看起来他们在HEAD here中向minitest / mock添加了方法存根。

那么,你是否要更新到最小的HEAD,我想你可以这样做:

product = Product.new
Product.stub(:find, product) do
  assert_equal product, Product.find(1)
end

答案 1 :(得分:0)

我所做的是简单地存根类方法并将其替换为我自己的 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
相关问题