【问题标题】:How to mock model attributes with Rspec?如何使用 Rspec 模拟模型属性?
【发布时间】:2015-12-26 22:22:33
【问题描述】:

我有一个控制器动作,例如:

    @widget = Widget.new(permitted_params)
    @widget.user_id = current_user.id

    if @widget.save
      @widget
    else
      { errors: @widget.errors.full_messages }
    end

我正在尝试为该控制器创建规范。

widget = mock_model(Widget)

allow(Widget).to receive(:new).and_return(widget)
allow(widget).to receive(:user_id).and_return(widget)
allow(widget).to receive(:save).and_return(true)

expect(widgets).to receive(:build)
expect(widget).to receive(:save)
post '/v2/widgets', name: 'foo'
expect(json_response).to eq widget.as_json

现在我得到了奇怪的东西:

 Failure/Error: post '/v2/widgets', name: 'foo'
   #<Double "Widget_1133"> received unexpected message :user_id= with (1129)

即使我有

allow(widget).to receive(:user_id).and_return(widget)

任何帮助我做错了什么?

谢谢

【问题讨论】:

    标签: ruby testing rspec mocking bdd


    【解决方案1】:

    好的,知道了。

    似乎我应该使用:

    allow(widget).to receive(:user_id=).and_return(widget)
    

    user_id= 而不是 user_id

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-03
      • 1970-01-01
      相关资源
      最近更新 更多