2011-09-20 96 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