Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rspec存根获取模型_Ruby On Rails_Ruby_Rspec - Fatal编程技术网

Ruby on rails Rspec存根获取模型

Ruby on rails Rspec存根获取模型,ruby-on-rails,ruby,rspec,Ruby On Rails,Ruby,Rspec,如何存根在控制器中获取的模型 例如: # 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, mo

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

例如:

# 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

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

这很简单,只需将
模型
模型2

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

你真棒。谢谢你的回答。