我正在将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,但是没有运气。

最佳答案

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

关于ruby-on-rails - 使用Mocha Rails的带有命名空间对象的 stub 实例,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20664411/

10-14 23:00