2011-09-20 1 views
2

죄송 비품,하지만 난 간단한 몇이 힘든 시간 나는 한 줄에 부탁 해요 무엇을 증류하려고 ...단위 테스트 낯선은 막연한 질문 제목

가 있어요 레일 (3.1) 모델 rails g scaffold 통해 생성 된, 내가 단위 테스트하려고합니다. 그들은 다음과 같은 방법으로 정의됩니다

class ModelA < ActiveRecord::Base 
    validates_presence_of :field1, :field2 
    validates_uniqueness_of :field1 
end 

class ModelB < ActiveRecord::Base 
    validates_presence_of :field1 
    validates_uniqueness_of :field1 
end 

나는 각 모델에 대한 설비의 몇 가지있다, 즉 :

model_a_no_field1: 
    field2: test 

model_a_no_field2: 
    field1: test 

model_a_ok: 
    field1: test 
    field2: test 

model_b_no_field1: 

model_b_ok: 
    field1: test 
내 단위 테스트는 이러한 검증을 테스트하는

:

class ModelATest < ActiveSupport::TestCase 
    test "field1 should be present" do 
    assert !model_as(:model_a_no_field1).valid? 
    end 

    test "field2 should be present" do 
    assert !model_as(:model_a_no_field2).valid? 
    end 

    test "field1 should be unique" do 
    model_a = model_as(:model_a_ok) 
    model_a.save 

    assert !model_as(:model_a_ok).valid? 
    end 
end 

이들 테 모두 올바르게 통과해야합니다. 그러나 ModelB에 대한 내 비슷한 단위 테스트 : 두 번째 테스트에

class ModelBTest < ActiveSupport::TestCase 
    test "field1 should be present" do 
    assert !model_bs(:model_b_no_field1).valid? 
    end 

    test "field1 should be unique" do 
    model_b = model_bs(:model_b_ok) 
    model_b.save 

    assert !model_bs(:model_b_ok).valid? 
    end 
end 

실패는 (고유성을 테스트).

나는 이것이 model_b_no_field1에 대한 빈 YAML 조명기와 관련이 있다고 확신하지만 잘 모르겠습니다. 테스트 방법의 본문을

test "field1 should be unique" do 
    model_b = model_bs(:model_b_ok) 
    model_b.save 

    model_b2 = ModelB.new 

    assert !model_b2.valid? 
end 

으로 대체하여 테스트를 통과시킬 수 있습니다. 그러나 어떤 일이 벌어지고 있는지 이해하고 싶습니다.

답변

3

레일이 당신을 위해 만드는 테스트 인프라를 파괴하고 있다고 생각합니다. yaml 파일에있는 모델은 유효해야하며 유효하지 않은 것을 테스트하려는 경우 테스트에서 만듭니다.

테스트에서 데이터를 작성하는 것은 매우 명확하고 구체적인 추가 값을 갖습니다. 그렇지 않으면 dev에 yaml 파일을 열어서 사용자가 보유한 데이터와 누락 된 데이터를 이해해야합니다.

+0

공정한 점, 감사합니다! – kfb