2014-06-22 2 views
1

컨트롤러에서 가져 오는 모델을 스텁하는 방법은 무엇입니까?Rspec 스텁 가져 오기 모델

예 : 나는 99

나는 물론, 다음과 같이 쓸 수 반환 model2 일명 Model.last 스텁 다음이했다 있는지 확인하기 위해 스펙을 쓸 수 있어야

# 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 

올바른 PARAMS 호출하지만 다른 방법이 있다면 궁금했다 :

def subtract_model(model) 
    value - model.value 
end 

답변

1

은 '쉽고, 단지 model2Model 스텁 :

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 
+1

하하, 오! 고마워. 너도, @spickermann – Baub

1

Model.last이 스텁를 반환하지 않습니다이지만 데이터베이스에서 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 
+0

당신은 최고입니다. 대답 해줘서 고마워. – Baub