2016-12-17 1 views
0

@instance 변수를 사용하지 않고 let(:object)을 사용하는 것이 가장 좋습니다. 그러나 각 단계가 이전 상태를 필요로하지만 클린 상태가 아닌 호출 순서의 테스트를 작성하는 방법.상호 작용 요청 시퀀스를 테스트하십시오.

describe "intearction" do 
    let(:user1) { ... } 
    let(:user2) { ... } 

    it "request" do 
    get "/api/v1/request", {user2}, token(user1) 
    expect(...).to ... 
    end 

    it "confirm" do 
    get "/api/v1/confirm", {user1}, token(user2) 
    expect(...).to ... 
    end 
end 

을하지만 그것은 작동하지 않습니다

나는 다음과 같은 코드를 작성하고 싶습니다. 그것은는이 같은 일을 할 수있다 :

describe "intearction" do 
    let(:user1) { ... } 
    let(:user2) { ... } 

    it "all tests" do 
    # request 
    get "/api/v1/request", {user2}, token(user1) 
    expect(...).to ... 
    # confirm 
    get "/api/v1/confirm", {user1}, token(user2) 
    expect(...).to ... 
    end 
end 

it 사용할 수 없게 될 및 테스트의 이름은 의견이나 콘솔로 풋된다. rspec 하위 시스템은 용도를 잃어 버립니다. @instance 변수를 사용하는 것은 나쁜 습관인데, 각 테스트마다 테스트 그룹별로 새로운 일반 변수를 생성하지 않는 let과 같은 정의 함수가 있습니까?

첫 번째 연도가 아닌 시퀀스와 API가 존재합니다. 시퀀스 테스트 실습은 무엇입니까?

답변

0

시험을위한 환경을 준비해야 할 때 시험을 치르려면 before 블록을 사용하십시오. 테스트 결과는 다음과 같습니다.

describe "intearction" do 
    let(:user1) { ... } 
    let(:user2) { ... } 

    describe '#request' do 
    it "does something" do 
     get "/api/v1/request", {user2}, token(user1) 
     expect(...).to ... 
    end 
    end 

    describe '#confirm' do 
    context 'request was made before' do 
     before { get "/api/v1/request", {user2}, token(user1) } 

     it "does something as well" do 
     get "/api/v1/confirm", {user1}, token(user2) 
     expect(...).to ... 
     end 
    end 
    end 
end