2011-09-20 66 views
2

很抱歉的模糊问题的标题,但我有一个困难时期试图提炼出什么,我问到一个班轮...单元测试陌生感灯具

我有几个简单的Rails(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 

这些te所有通过正确。然而,我对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 

失败的第二个测试(测试唯一性)。

我几乎可以肯定,这是与空的YAML夹具model_b_no_field1,但我不知道。我可以通过更换测试方法体来通过测试

​​3210

这很好,但我想了解这里发生了什么。

回答

3

我认为你正在颠覆rails为你创建的测试基础架构。你在yaml文件中的模型应该是有效的,如果你想测试一些无效的东西,那么在测试中创建它。

在测试中创建数据具有非常清晰和具体的额外价值。否则,开发人员需要打开yaml文件以了解您拥有哪些数据以及缺少哪些数据。

+0

公平点,谢谢! – kfb