2014-10-15 6 views
0

나는 내 물건을 만들기 위해 공장 소녀를 사용하고 있습니다. 내가 슬롯을 덮어 그냥 factory_girl에 의해 만들어진 하나를 사용하지 않는 경우, 테스트를 통과하지 않습니다Rspec 변경 matcher 및 공장 girl

RSpec.describe V1::SlotsController, type: :controller do 
    let(:valid_slot) { create(:slot) } 
    let(:valid_attributes) { attributes_for(:slot) } 

    describe "DELETE destroy" do 
    it "destroys the requested slot" do 
     slot = Slot.create! valid_attributes # not working without this line 
     expect { 
     delete :destroy, { id: slot.id } 
     }.to change(Slot, :count).by(-1) 
    end 
    end 
end 

: 나는 다음해야 할 이유가 궁금하네요. 왜?

답변

1

let"lazy loaded"이기 때문에. 당신은 사용해야합니다

let!(:slot) { create(:slot) } 

describe "DELETE destroy" do 
    it "destroys the requested slot" do 
    expect { 
     delete :destroy, { id: slot.id } 
    }.to change(Slot, :count).by(-1) 
    end 
end 
+0

굉장, 고마워. 항상 let을 사용하는 것이 (성능 현명함) 저장됩니까! (예 : GET, PATCH) 필요한 경우에만 사용해야합니까 (예 : DELETE)? – einSelbst

+0

빠른 테스트를 위해 테스트에 불필요한 레코드를 작성하지 마십시오. 예를 들어 expect 블록을 실행하기 전에'slot'을 생성해야합니다. 그러나 여기에서'let!'은'describe "DELETE destroy"를 벗어 났고, 더 많은 설명을 추가하면 사용되지 않더라도 매번'slot'이 생성됩니다. – gotva