2011-01-05 2 views
7

나는 잠시 동안 shoulda를 사용했고, rspec을 읽고 읽었습니다. 나는 심도있게 비교하고 대조하지 않았다. 그러나 두 사람 사이에 약간의 중첩이있는 것처럼 보이지만, 그들은 1-1 대체물이 아닙니다.rspec과 shoulda - 보완 적이거나 대안이 있습니까?

필자는 shoulda로 작성된 기존의 모든 테스트를 대체하지 않고 rspec을 사용하여 레일 시스템에 단위 테스트를 작성하려고합니다. 느낌을 얻는 방법으로.

이것은 좋은 아이디어입니까? 점차적으로 다른 곳으로 이동할 수 있습니까? 아니면 문제가 있습니까?

분명히 고려해야 할 장점 중 하나는 무엇입니까?

감사합니다!

답변

12

저는 Chris의 답변에 대해 그들이 대안이라고 주장해야합니다. 나는 Rails 애플리케이션에서 Shoulda와 Rspec을 함께 사용하고 서로를 잘 보완한다.

이 콤보를 사용하면 연관성 및 유효성 검사와 같은 반복적 인 항목에 대한 간결한 한 줄 단위 테스트를 작성할 수있을뿐 아니라 복잡한 사양을위한 전체 rspec 모음을 가질 수 있습니다. 갈등없이 두 세계의 장점을 최대한 활용하십시오.

측면 Rspec 함께 설치하는 방법을 보여주는 Shoulda README을 확인하십시오. 또한 Test :: Unit 및 RSpec 호환 One-Liner를 제공하여 일반 레일 기능을 테스트한다고합니다.이 테스트는 훨씬 길고 복잡하며 오류가 발생하기 쉽습니다. "

편집 (예) : 내 사양의 상단에

, 나는 항상 간결하고 읽기 쉬운 내 클래스 관계 및 검증 테스트를 선언합니다.

describe Component do 

    context 'relationships' do 
    it { should belong_to(:technology)} 
    it { should have_many(:system_components) } 
    it { should have_and_belong_to_many(:variables) } 
    it { should have_many(:images).dependent(:destroy) } 
    it { should have_many(:documents).dependent(:destroy) } 
    end 

    context 'validations' do 
    it { should validate_presence_of(:make) } 
    it { should validate_presence_of(:model) } 
    it { should ensure_length_of(:name).is_at_most(100) } 
    it { should validate_presence_of(:technology_id) } 
    end 
end 

그런 다음 내 사양의 나머지는 내가 RSpec에에서 온 모의 객체와 스텁을 사용하고 더 복잡한 테스트를해야합니다.

+0

여기에 대한 더 많은 관점이 있습니다. http://stackoverflow.com/questions/3604564/rspec-vs-shoulda –

+0

하나의 작업으로 수행 할 수없는 콤보로 수행하는 작업의 몇 가지 예를 좋아합니다. 또는 다른. 테스트를 정리할 수있는 방법이 있다면, 나는 그것을 위해 모든 것입니다. 나는 shoulda + matchy를 함께 사용했고, rspec은 기본적으로 그렇게했고 거기에서부터 발견되었습니다. 컨트롤러 매처와 같은 것입니까? –

+0

나는 내가 가지고있는 수면 테스트 중 일부를 사용하여 나의 대답을 업데이트했다. 필자가 따라야 할 규칙 중 하나는 Shoulda가 유효성 검사 및 관계와 같은 Rails의 Class 매크로에 사용되며 Rspec은 모의 객체 및 메소드 스텁이 필요한 더 복잡한 테스트를위한 것입니다. –

0

rspec과 shoulda는 서로의 대안입니다. 나는 shoulda로 시작했고, rspec로 이동하는 것은 s/context/describe/, s/should/it/처럼 간단합니다. 그리고 여러분은 경기를 끝내야합니다. rspec에는 여러 가지 트릭, 다양한 통합 및 더 복잡한 matchers가 있으므로 요즘 더 많이 사용하고 있습니다.

필자의 초기 좌절감 중 하나는 Rails와 Cucumber를 가정하지 않은 튜토리얼을 찾는 것이 거의 불가능하다는 것입니다. 그것을 지나치게 생각하지 마십시오 - 당신이 할 수있는 일이 많지만, 사용하기 전에 솔루션의 괴물을 가질 필요가 없습니다.