我有一个 Controller 操作,类似于:
@widget = Widget.new(permitted_params)
@widget.user_id = current_user.id
if @widget.save
@widget
else
{ errors: @widget.errors.full_messages }
end
我正在尝试为该 Controller 创建一个规范。
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)
有什么帮助吗?我犯了什么错误?
谢谢
最佳答案
好的,明白了。
看来我应该使用:
allow(widget).to receive(:user_id=).and_return(widget)
:user_id=
,而不是:user_id
关于ruby - 如何使用 Rspec 模拟模型属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32843950/