2012-01-21 3 views
1

나는 레일을 배웠을 때 오이로 시작해서 그것을 시험해보기 위해 몇 가지 시나리오를 수행했습니다. 아래 시나리오를 평가하고 특히 세 번째 단계 정의를 수행하는 더 좋은 방법을 알려주십시오.Rails + Cucumber : 제한된 리소스에 대한 액세스를 테스트하는 방법은 무엇입니까?

나는 devise를 사용하고있어 사용자를 상당히 커스터마이징 할 것이므로, 내가 뭔가를 변경해도 사용자가 예상대로 작동하는지 확인하고 싶습니다.

아마도이 부분은 괜찮습니다 (모든 입력 환영).

Scenario: Visitor creates an account 
    Given I am not authenticated 
    When I do everything required to create an account 
    Then I should have access to it 

처음 두 단계도 괜찮을 수 있습니다.

Given /^I am not authenticated$/ do 
    visit destroy_user_session_path 
end 

When /^I do everything required to create an account$/ do 
    email = '[email protected]' 
    name = 'asdf' 
    password = 'asdf' 
    visit new_user_registration_path 
    fill_in 'user_email', :with => email 
    fill_in 'user_name', :with => name 
    fill_in 'user_password', :with => password 
    fill_in 'user_password_confirmation', :with => password 
    click_on('Sign up') 

end 

하지만 제 3자가 나를 잡아줍니다. 나는 헤더에서 200 개의 성공을 얻었는지 또는 사용자가 액세스 권한이 있는지 여부를 확인하는 근본적인 방법으로 권한이없는 401을 테스트하려고 생각했습니다. 그러나 나는 그것을 할 길을 찾을 수 없었습니다. 내가 올바른 생각을 가지고 있다면, 그것을 할 수있는 코드는 무엇입니까? 내가 틀린 생각을 가지고 있다면, 왜 그런가? 그리고 그것을하는 더 좋은 방법은 무엇인가?

Then /^I should have access to it$/ do 
    visit edit_user_registration_path 
    page.should have_selector "something that only exists on the edit registration page" #works but seems very brittle 
    # my failed attempt at using rspec inside the step definition: 
    # get edit_user_registration_path 
    # response.headers["Status"].downcase.should == "200 success" 
    # 
    # another failed attempt: 
    # response.should render_template(...) 
    # end 
end 

답변

1

우선 두 가지 시나리오에서 원하는 것을 분리합니다. 첫 번째 : '방문자가 계정을 만듭니다.'사용자가 볼 메시지를 테스트하여 마지막 단계를 대체합니다. 예를 들어 '계정이 성공적으로 생성되었습니다.'가 표시되어야합니다. 두 번째는 로그인 한 사용자 만 액세스 할 수있는 링크를 클릭하여 테스트 할 수있는 "사용자 로그인"입니다. 어쨌든 Cucumber, RSpec, Devise를 사용하고 있다면 정확히 찾고있는 것을 찾을 수있는 Rails 3 in Action을 읽어 보길 강력히 권합니다. 사용자 오이 테이블과 더 많은 흥미로운 것들을 배울 수있는 예제가 있습니다.

도움이 되길 바랍니다.

+0

다른 답변을 통해이 사실을 알았습니까? :) 대답 해줘서 고마워! 나는 그 스타일을 사용하는 것을 보았지만, 그것은 불필요하게 워크 플로우/UI에 결합 된 것으로 보인다. 나는 그것들을위한 별도의 사양을 가지고있다. 나는 그것이 표준이 아니라고 생각하지만, 내가 생각하는 방식에 맞아서 시도하고있다. 나는 [이 줄] (http://ruby.11.n6.nabble.com/How-do-I-include-routing-path-helpers-td3484906.html)에서 더 많은 것을 생각하고 있었다. 사양/라우팅 외부에 배치하십시오. 내가 성취하고자하는 것은 그 동작이 인터페이스 (HTML/JSON/etc)와 독립적으로 작동하는지 테스트하는 것입니다. – KobeJohn

+0

아, 책 고마워. 나는 BDD를 위해 오이를 사용하는 것을 보지 못했다. 오이 스타일로 재미있게 일하고 있습니다. 구현을 원하는 동작과 분리하려고 시도하는 것이 좋습니다. [예제를 통한 사양] (http://www.amazon.com/Specification-Example-Successful-Deliver-Software/dp/1617290084/ref=pd_bxgy_b_img_b)은 훌륭한 책으로 시작되었습니다. – KobeJohn

관련 문제