2011-02-07 5 views
1

이 질문은 영어로 된 RSpec 예제 그룹 및 예제를 가장 잘 명명하는 방법에 관한 것입니다.RSpec 예제 그룹 이름 지정 (웹 응용 프로그램 용)

나는 (functionally equivalent 있습니다) 및 it RSpec에, describe, context 당신에게 완전한 문장을 제공 해야하는 것으로 알고 있습니다. 예를 들어,

describe "Log-in controller" do 
    context "with logged-in user" do 
    it "redirects to root" do 
     ... 
    end 
    end 
end 

읽기 Log-in controller with logged-in user redirects to root입니다. 굉장해. 내가 여기에 두 개의 안티 패턴을 볼

describe "blog post" do 
    describe "content" do 
    it "is displayed" 
    end 
    describe "comment" do 
    it "is displayed" 
    describe "editing" do 
     it "works" # successful comment editing 
     it "requires logged-in user" # error case 1 
     it "requires non-empty body" # error case 2 
    end 
    end 
    describe "comment form" do 
    it "works" # successful comment submission 
    it "requires valid email address" # error case 1 
    it "requires non-empty body" # error case 2 
    end 
end 

을 :

그러나 내가 ajaxy 페이지의 모든 구성 요소를 테스트 할 필요가 내 응용 프로그램에서

은 (카피 바라를 사용하여),이 같은 예를 들어 그룹이 경향

  1. 중첩 된 설명은 문장으로 읽지 않습니다. 당연히 사람은의 것을 둘 수 있었다 :

    describe "blog post" do 
        describe "'s content" do 
        it "is displayed" 
        end 
    end 
    

    또는 사람은 "블로그 포스트 :"후에 콜론을 둘 수 있었다. 또는 이상적으로, 나는

    describe "blog post" do 
        its "content" do 
        it "is displayed" 
        end 
    end 
    

    을 작성하지만 its는 속성 액세스에 대한 때문에 그것은 가능하지, 난 그냥 여기 문자열을 가지고있다.

    "페이지 구성 요소"문제를 해결하는 더 좋은 방법이 있습니까?

  2. 기능의 경우 성공 사례 (의견 제출과 같은 기능)는 it "works"으로 간단히 표시됩니다. 적어도 간결하고 간단합니다. it "can be submitted and causes a comment to be added"보다 약간 더 바람직하다고 생각합니다. 그 이유는 저에게 명백한 어떤 것을위한 구술을 만들어야하기 때문입니다. 그러나 이것을하기에 더 좋고 더 자연스러운 방법이 있습니까?

예제 example-group;을 재구성하는 방법에 대한 제안)

답변

1

예를 들어 문법적으로 올바른 것으로 생각하지 않아야합니다. 테스트가 '블로그 게시물 콘텐츠가 표시됨'을 읽는다면 괜찮습니다. 이 테스트는 읽기 쉽고 간단합니다. 당신이 정말로 원하는 것은 테스트가 작동하지 않을 때 실패한 것을 이해할 수있는 것입니다.

두 번째 점에 대해서는 '잘 작동합니다'는 일반적으로 설명이 충분하지 않습니다. 그것은 다른 사람이 당신이 '작품'이라는 의미를 알도록하지 않습니다. 실제로 여러 가지를 테스트하는 경우 예를 들어 분할하는 것이 가장 좋습니다.

 
describe 'blog post' do 
    context 'creating a comment' do 
    it 'should require a logged-in user' 
    it 'should require a non-empty body' 
    it 'should require a valid email address' 
    it 'should create a new comment' 
    it 'should be submittable' 
    end 
end 
+0

흥미 롭습니다! 나는 당신의 예제에 의해 분리 된 것에 대해 확신 할 수 있을지 모르겠다. ":"제출 가능해야한다 "는 흥미로운 테스트는 아니며 (단지 버튼이 필요하다)"새로운 코멘트를 만든다. ","새로운 코멘트는 올바른 저자를가집니다 "등은 보통 코드를 복제하고 성능을 잃어 버리는 것만으로 분할 가능합니다 (실제로는 Selenium에 대해 상처를줍니다). 성공 사례를 위해, 저는 보통 KISS를 적용하고 기능에 대한 운동을하고, 걱정되는 것에 대해 무리한 기대감을 제시합니다. 필자는 스펙을 유지 보수 할 수있는 기능을 실제로 분리하지 못하고있다. –

+0

의사 코드는 가이드로만 사용됩니다. '제출할 수 있어야합니다'는 '어떻게 분할해야하는지에 대한 예'였으며 '제출하여 의견을 작성하게했습니다'.제 요점은 각 테스트마다 다른 테스트 조건을 원한다는 것입니다. 설명에 '및'을 추가하기 시작하면 분리가 필요합니다. Silenium으로 테스트하는 경우 100 % 적용 범위를 권장하지 않습니다. 모델 및 컨트롤러 테스트를 통해 동등한 수준의 적용 범위를 달성 할 수 있습니다. 성능 및 복제가 걱정되면 이러한 문제를 피하기 위해 백그라운드 조건을 만드십시오. –

+0

내 테스트를 분할하면 유지 관리가 더 쉬워 질 것이라고 저는 확신하지 못합니다. "의견을 제출하거나 JS를 통해 동적으로 추가되었는지 확인하십시오. 올바른 작성자가 있는지 확인하고 날짜가 있는지 확인하고 편집 할 수 있는지 확인한 다음 페이지를 다시로드 한 후 페이지에 계속 표시되어 있는지 확인하십시오." 당신은 실제로 그것을 여러 테스트들로 나누는 것을 주창합니다 (간결한 기대치를 갖는 것보다)? Btw, "배경 조건"이란 무엇입니까? ': speed => : 느린'종류의 메타 데이터? –

관련 문제