Ruby 如何使用Rspec模拟模型属性?

Ruby 如何使用Rspec模拟模型属性?,ruby,testing,rspec,mocking,bdd,Ruby,Testing,Rspec,Mocking,Bdd,我有一个控制器动作,类似于: @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(W

我有一个控制器动作,类似于:

    @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)
用户id=而非用户id

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