2009-06-26 2 views
0

모델이 레일에서 유효하다는 것을 테스트하는 모범 사례 방법은 무엇입니까?레일이 양식 유효 함을 주장합니다.

예를 들어 email_address 속성의 고유성을 검사하는 User 모델이있는 경우 양식 게시가 오류를 반환했는지 (또는 더 좋게는 해당 필드에 대한 오류가 특별히 반환 됨) 확인하는 방법은 어떻게됩니까?

나는 이것이 분명해야한다고 생각하지만, 빨리 알아 내기 때문에 효과적으로 Google 루비 질문에 필요한 어휘가 아직 없다.

답변

2

가장 쉬운 방법은 아마 다음과 같습니다 당신이 설정 방법에 논리를 복제 할 수있는 경우에 당신이이 문제에 대해 별도의 테스트 케이스를 만들려고하지 않는 것이 가능 물론

class UserEmailAddressDuplicateTest < ActiveSupport::TestCase 
    def setup 
    @email = "[email protected]" 
    @user1, @user2 = User.create(:email => @email), User.new(:email => @email) 
    end 

    def test_user_should_not_be_valid_given_duplicate_email_addresses 
    assert [email protected]? 
    end 

    def test_user_should_produce_error_for_duplicate_email_address 
    # Test for the default error message. 
    assert_equal "has already been taken", @user2.errors.on(:email) 
    end 
end 

, 두 테스트 모두에 포함 시키거나 (또는 ​​개인 메소드에 넣으십시오).

또는 fixtures/users.yml과 같은 고정 장치에 첫 번째 (참조) 사용자를 저장하고 각 테스트에서 중복 주소가있는 새 사용자를 인스턴스화하기 만하면됩니다.

리펙터가 적합하다고 생각합니다!

2

http://thoughtbot.com/projects/shoulda/

진작은 많은 다른 것들과 함께 검증과 같은 테스트 것들에 대한 매크로가 포함되어 있습니다. TDD를 체크 아웃 할만한 가치가 있습니다.

+0

Shoulda rocks! 테스트 스위트 개선 및 DRY 테스트 작성에 도움이되는 플러그인. –

1

단위 테스트를 통해 모델을 테스트하는 것은 물론 1 단계입니다. 그러나 이것이 반드시 사용자가 필요한 피드백을 얻을 것이라는 것을 보장하지는 않습니다.

Section 4 of the Rails Guide on Testing에는 기능 테스트 (예 : 컨트롤러 및 뷰 테스트)에 대한 많은 정보가 있습니다. 여기에는 몇 가지 기본 옵션이 있습니다 : 플래시에 오류에 관한 메시지가 있는지 확인하거나 assert_select를 사용하여 오류가 발생했을 때 생성 된 실제 HTML 요소를 찾습니다. 후자는 실제로 사용자가 실제로 메시지를 받을지 테스트하는 유일한 방법입니다.

관련 문제