2012-10-15 1 views
3

RSpec 및 Capybara를 사용하여 단위 테스트를 수행하는 프로젝트가 있습니다. 필자는 모델과 컨트롤러 테스트를 완벽하게 플러시하고 사전 데이터베이스 유효성 검사를 위해 무거운 작업을 처리합니다.RSpec/Capybara로 양식 제출 결정

이제 사용자 경험과 프런트 엔드 항목을 테스트하고 양식이 제출되지 않았 음을 확인할 수있는 방법을 알고 싶습니다. 사용자가 비밀번호 또는 다른 오류 데이터가 일치하지 않으면 오류를 설정하고 제출을 방지하는 스크립트가 있습니다.

나는 오류 텍스트를 검색 할 수 있지만 '제출'이 발생하지 않았는지 확인하고 서버가 연결되지 않았다고 확신 할 수있는 곳을 알고 있습니다.

it "should not sumbit if user name is less than 3 characters" do 
    visit /edit_account_settings(@user) 
    fill_in "username", :with => "fo" 
    click_button "SAVE" 

    # HOW DO I DO THIS? 
    expect(...).not_to submit_to_server 
end 

답변

3

이것은 당신이 통합 테스트에서 테스트해야 일이 아니다 :

내가 좋아하는 뭔가를 원한다. 통합 테스트에서는 최종 사용자의 관점을 취하므로 사용자가 실제로 볼 수있는 것만을으로 테스트해야합니다. 사용자가 양식이 제출되지 않았다는 유일한 증거가 오류 메시지 인 경우 테스트해야합니다.

+2

나는 동의하지 않습니다. 테스트는 사용자가 보는 것이 아니라 "경험"해야합니다. 그들은 분명히 서버 포스트를 경험하지 않으며 내가 원하는 것을 원하지 않습니다. – Joe

+4

경험이 무엇이든 인터페이스를 통해 테스트 할 수 있어야합니다. 그들은 서버 게시물을 직접 경험하지 않습니다 (테스트하려는 것), 오류 메시지 또는 사용자가 제공하는 다른 출력을 통해 경험할 수 있습니다. –

3

통합 테스트에서 빈 필드가 주어진 경우 사용자가 보게 될 것을 가장 많이 테스트합니다. 유효성 검사에 따라 오류 메시지가 있어야합니다. 그래도 다음과 같이 확인하고 싶다면

describe "User Registration" do 

    before do 
    visit /edit_account_settings(@user) 
    fill_in "username", :with => "fo" 
    click_button "SAVE" 
    end 

    it "should not sumbit if user name is less than 3 characters" do 
    page.should have_content "your error message" 
    end 

    it "should create the user and redirect to blah_path" do 
    current_path.should eq blah_path 
    end 

    it "should add user in users table" do 
    expect { user.create }.to change(User, :count).from(0).to(1) 
    end 

end