【问题标题】:Rspec Stub Fetched ModelRspec Stub 获取模型
【发布时间】:2014-06-22 11:00:34
【问题描述】:

如何存根在控制器中获取的模型?

例子:

# Model Spec
it 'does something' do
  allow(model).to receive(:value).and_return 100
  model2 = FactoryGirl.create :model
  allow(model2).to receive(:value).and_return 99
  # next line fails because it returns 100. when fetched, model2.value = 0
  expect(model.subtract_last_model).to eq 1
end

# Model
def subtract_last_model
 value - Model.last.value
end

我需要能够存根 model2 aka Model.last 以返回 99。

当然,我可以编写以下代码,然后编写规范以查看是否使用正确的参数调用它,但我很好奇是否还有其他方法:

def subtract_model(model)
  value - model.value
end

【问题讨论】:

    标签: ruby-on-rails ruby rspec


    【解决方案1】:

    这很简单,只需将Modelmodel2 存根:

    it 'does something' do
      allow(model).to receive(:value).and_return 100
      model2 = FactoryGirl.create :model
    
      #  stub Model
      allow(Model).to receive(:last).and_return model2
      allow(model2).to receive(:value).and_return 99
    
      # next line fails because it returns 100. when fetched, model2.value = 0
      expect(model.subtract_last_model).to eq 1
    end
    

    【讨论】:

      【解决方案2】:

      Model.last 不会返回已存根的model2,而是从数据库重新加载未存根版本的model2。因此:

      it 'does something' do
        allow(model).to receive(:value).and_return 100
        model2 = FactoryGirl.create :model
        allow(model2).to receive(:value).and_return 99
      
        allow(Model).to receive(:last).and_return(model2)
      
        expect(model.subtract_last_model).to eq 1
      end
      

      【讨论】:

      • 你太棒了。感谢您的回答。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-01-24
      • 2012-07-04
      • 2015-12-11
      • 2011-08-26
      • 2012-01-15
      • 1970-01-01
      相关资源
      最近更新 更多