2011-05-06 3 views
3

나는 정확한 단어가 무엇인지 모르겠다.Capybara를 사용하여 컨트롤러 테스트에 표시, 게시, 게시하려면 어떻게합니까?

이것은 '아직 응답이 없다. 먼저 페이지를 요청하십시오. '

it "should list searches" do 
    get 'index' 
    page.should have_selector('tr#search-1') 
end 

이 대신에 이와 같은 의미입니까?

it "should list searches" do 
    get 'index' do 
    page.should have_selector('tr#search-1') 
    end 
end 

그런 식으로는 실제로 아무 것도 테스트하지 않는 것 같습니다.

올바른 방법은 무엇입니까?

답변

6

to this 따르면, 카피 바라 기본 드라이버 PUT 및 DELETE 요청을 지원하지 않습니다. PUT 및 DELETE는 일반적으로 REST 기반 아키텍처를 수용하기 위해 javascript로 가짜입니다.

체크하지 않았지만 Selenium과 같은 JS 호환 드라이버 중 하나를 사용하면 Capybara에서 PUT 및 DELETE를 사용할 수 있다고 생각합니다.

0

일반적으로 카피 바라와 함께 visit을 사용하여 페이지를 방문합니다.

it 'should list searches' do 
    visit '/' 
    page.should have_selector('tr#search-1') 
end 
+1

하지만 Rack-Test 드라이버 용 RubyDoc을 확인하십시오. http://rubydoc.info/github/jnicklas/capybara/master/Capybara/RackTest/Driver 정의 된 메소드를 가져오고, 삭제하고, 게시합니다 (일반적인 방문과 마찬가지로). 이것들이 제가 의심하는 바를 수행한다면, 나머지 컨트롤러들을 테스트하는데 매우 유용 할 것입니다. 나는 그들을 사용하는 방법을 알아낼 수 없습니다. –

5

get, post 등의 메소드는 완전히 별개의 테스트 시스템 인 레일 컨트롤러 테스트 용 functional test interface의 일부입니다. 카피 바라와 함께 사용할 수 없습니다.

GET 요청의 경우 Capybara의 visit 메서드를 대신 사용하십시오.

다른 요청 유형 (POST, PUT, ...)의 경우 사용자가 수행하는 작업을 수행하고 양식이있는 페이지를 방문하여 작성하고 제출하십시오. 당신이 API를 테스트하는 경우 또는,과 같이, 카피 바라를 사용하지 않고 컨트롤러에 대한 기능 테스트를 작성 :

post :index 
response.status.should == 200 
response.body.should contain('Hello World') 

why you shouldn't test APIs with Capybara에 조나스의 게시물을 참조하십시오.

관련 문제