2013-08-06 1 views
2

이 두 시험 :RSpec에서 'expect'와 'should'사이에 차이가 있습니까?

it "fails to create given a bad player list" do 
    Team.new("Random name", bad_players).should raise_error 
end 

it "fails to create given a bad player list" do 
    expect {Team.new("Random name", bad_players)}.to raise_error 
end 

서로 다른 출력을 리턴 (2 일이 경과하는 동안 첫번째는 실패). 팀 모델의 내용에 따라 둘 다 합격하거나 실패 할 것으로 예상됩니다.

전체 RSpec에 코드는 다음과 같습니다

require_relative 'team' 

describe "Team" do 

    it "has a name" do 
    Team.new("Random name").should respond_to(:name) 
    end 

    it "has a list of players" do 
    Team.new("Random name").players.should be_kind_of Array 
    end 

    it "is favored if it has a celebrity on it" 
    it "complains if there is a bad word in the name" 

    context "given a bad list of players" do 
    let(:bad_players) { {} } 

    it "fails to create given a bad player list" do 
     expect { Team.new("Random name", bad_players) }.to raise_error 
    end 
    end 

end 

내가 생각하는 이유 때문에서 유사한 구문이다 일하는 것이 '해야한다'테스트 '는 "이름이"'. 'should'가 틀렸고 'to ... to'이 맞다는 것이 밝혀지면, 나는 다른 것을 사용할 때를 알고 싶습니다. 감사. 권리 측면에서 무엇을 확인하는 차이

should에게이

답변

4

https://github.com/rspec/rspec-expectations/blob/master/Should.md 인용 :

시작 RSpec::Expectations로부터 제공 expectat을 정의하고 should should_not 방법 이온을 버전 에서 2.11 expect 메소드가 소개되었으므로 이제는 객체에 대한 기대치를 정의하는 데 권장되는 방법입니다.

이 문서의 다음 단락은 구현의 차이점과 이유는 expect이 이제 권장되는 접근 방식입니다.

이 시점에서 shouldshould_not으로 수행 할 수있는 거의 모든 작업은 expect으로 수행 할 수 있습니다. 자세한 내용은 http://rubydoc.info/gems/rspec-expectations/frames을, expect 사용법을 참조하십시오.

특정 코드의 경우 첫 번째 예제가 실패하는 이유는 RSpec이 참여하기 전에 오류가 발생하고 있기 때문입니다. should을 사용하여 오류가 있는지 확인할 수 있지만 RSpec에게 작업 기회를 제공해야합니다. 구문은 lambda {...}.should raise_error입니다. 여기서 ...은 테스트중인 코드입니다.

3

찬성은 true입니다. 결과를 간단히 비교하는 데 사용해야합니다.

(1+1).should eq(3-1) 

expect는 블록을 가져 오며 블록의 실행은 특정 효과를 확인. 당신이하고 expect (가 쓰기 쉽게) 수 should이 일을 할 수없는 경우에만 필수로 사용 should 전에 블록이

expect{ User.new.save }.to change(User, :count).by(1) 

를 실행 한 후 상황을 비교할 때 사용해야합니다

관련 문제