2010-11-29 4 views
1

RSpec을 직접 배우려고 노력하는 것보다 더 많이 물어 뜯고 있다고 생각합니다 ... RSpec 2에 대한 완전한 설명서가없는 것 같습니다. 적어도 내가 발견 할 수 있었던 아무도 ...RSpec 2의 생성 된 사양 이해

어쨌든, 나는 RSpec을 통합하려는 미약 한 시도에서, 레일즈 3의 스캐 폴드 제너레이터에 의해 만들어진 29 개의 스펙을 검토하여 시작했다. 나를 도망칩니다. 누군가가 도움을 줄 수 있다면 (또는 적절한 RSpec 2 문서를 가르쳐주십시오).

예를 들어 첫 번째 코드 블록 (def mock_clown..)에서 mock_clown이 테스트 할 Clown 클래스의 모의 객체를 만들고 있다고 가정 할 수 있습니다. 그러나 정확히 무슨 일이 벌어지고 있습니까? 이 "모의"를 생성하는 것은 무엇입니까? .as_null_object.tap은 무엇을 의미합니까? 내가 건너 한 의 모든 문서 또는 자습서이 블록을 비교하는 예를 찾을 수 없습니다 이것은

#clowns_controller_spec.rb 

require 'spec_helper' 

describe ClownsController do 

    def mock_clown(stubs={}) 
    (@mock_clown ||= mock_model(Clown).as_null_object).tap do |clown| 
     clown.stub(stubs) unless stubs.empty? 
    end 
    end 

    describe "GET index" do 
    it "assigns all clowns as @clowns" do 
     Clown.stub(:all) { [mock_clown] } 
     get :index 
     assigns(:clowns).should eq([mock_clown]) 
    end 
    end 

... 


    describe "POST create" do 

... 


    describe "with invalid params" do 
     it "assigns a newly created but unsaved clown as @clown" do 
     Clown.stub(:new).with({'these' => 'params'}) { mock_clown(:save => false) } 
     post :create, :clown => {'these' => 'params'} 
     assigns(:clown).should be(mock_clown) 
     end 

     it "re-renders the 'new' template" do 
     Clown.stub(:new) { mock_clown(:save => false) } 
     post :create, :clown => {} 
     response.should render_template("new") 
     end 
    end 

... 

end 

답변

4

RSpec에 대한 문서의 가장 좋은 소스가 아마 그 github에 있습니다 ... 매우 혼란 위키. 다음은 모든 보석에 대한 일반적인 링크입니다 : https://github.com/rspec/rspec/wiki. 또한 rdoc, linked to here을 확인하십시오.

특정 답변의 경우 as_null_object는 모의 기록을 기록하고 모든 메소드 호출을 무시합니다. (이것은 객체에 대한 모든 단일 메소드를 지정하지 않아도되므로 좋을 것입니다.)

Tap은 Ruby 1.9 기능입니다. 문서 at this link에서 :

개체 # 탭

블록에 객체를 전달하고가 (호출 체인에 사용되는 의미) 반환합니다.

자신에 RSpec에 2 Webrat와 오이를 배우고, 나는 확실히 the RSpec Book. 굉장 자원을 확인하는 것이 좋습니다, 그리고 모든 측면을 다룹니다.