【问题标题】:stub instance with namespaced object using Mocha Rails使用 Mocha Rails 具有命名空间对象的存根实例
【发布时间】:2013-12-18 17:18:41
【问题描述】:

我正在使用带有测试单元的 Mocha 库。 https://github.com/freerange/mocha

这是我的控制器操作

def update_purchase_state
  current_state = @purchase.aasm_state
  @purchase.update_attribute :aasm_state, params[:purchase_state]
  flash[:notice] = "successfully update the purchase state from '#{current_state}' to '#{params[:purchase_state]}'"
  redirect_to home_admin_purchase_editor_path(purchase_id: @purchase)
end

这是我的控制器测试

should "update the purchase's state" do
  PurchaseEditor::Purchase.any_instance.expects(:aasm_state).returns("paid")
  PurchaseEditor::Purchase.any_instance.expects(:update_attribute)
  post :update_purchase_state, purchase_id: "1", purchase_state: "refunded"
  assert_response 200
  assert_match /successfully update the purchase state/, flash[:notice]
end

我得到的错误是 nil 类的 undef 方法 aasm_state。 我很困惑,因为我以为我是在用 .any_instance 嘲笑它。我也尝试过 .stubs,但没有运气。

【问题讨论】:

    标签: ruby-on-rails testing mocking mocha.js


    【解决方案1】:

    .any_instance 将适用于Purchase 的实例,但@purchase 不是Purchase 的实例。在这种情况下是nil。您需要解决您在控制器中分配@purchase 的位置,或者您需要自己从规范中人为地分配它。

    【讨论】:

    • 我明白了,所以我需要返回一个响应 .aasm_state 的对象。感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 2019-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-20
    • 2019-11-02
    • 1970-01-01
    相关资源
    最近更新 更多