ruby - 如何使用 Rspec 模拟模型属性?

标签 ruby testing rspec mocking bdd

我有一个 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/

相关文章:

ruby pry whereami 命令不起作用

ruby-on-rails - 如何查找上个月创建的记录?

ruby-on-rails - 使用 has_many 关联保存模型

ruby - 无法加载此类文件——脚本/rails : Getting this error while remote debugging through RubyMine

testing - Verilog d触发器电路测试

testing - 在一个小 cucumber 场景中有多组 Given/When/Then 是否可以

python - “类”对象没有属性 'method'

ruby - 令人困惑的 RSpec 哈希匹配差异

ruby-on-rails - 使用 Let 构建模型的多个实例

ruby-on-rails - 如何构建我的 RSpec 测试文件夹、文件和数据库?