2016-04-06 79 views
0

我正在構建Rails 4(4.2.6)應用程序,現在我想指定一個Minitest測試'表示興趣點打印在Leaflet-Map上的模型。作爲DB,我們通過'pg'gem來使用Postgres(它無論如何都不會與測試相關)。不幸的是,即使像在一個錯誤的結果如下一個簡單的測試執行bundle exec rake test:modelsRails模型測試:錯誤:列[..]中的空值違反了非空約束

class PlaceTest < ActiveSupport::TestCase 
def setup 
    @place = Place.new(latitude: 12, longitude: 52, name: 'foo', categories: 'bar') 
end 

test 'valid place is valid' do 
    assert @place.valid? 
end 

錯誤時是以下

PlaceTest#test_valid_place_is_valid: 
ActiveRecord::StatementInvalid: PG::NotNullViolation: ERROR: null value in column "latitude" violates not-null constraint 
DETAIL: Failing row contains (980190962, null, null, 2016-04-06 11:16:08, 2016-04-06 11:16:08, null, null). 
: INSERT INTO "places" ("created_at", "updated_at", "id") VALUES ('2016-04-06 11:16:08', '2016-04-06 11:16:08', 980190962) 

我不知道如何解釋這些錯誤,因爲latitude是不是空所有。顯然它不能是一個數據庫相關的錯誤,因爲實例沒有被寫入數據庫。儘管如此,錯誤消息莫名其妙地有這種聲音。該schema.rb文件看起來像這樣:

ActiveRecord::Schema.define(version: 20160403170121) do 

enable_extension "plpgsql" 

create_table "descriptions", force: :cascade do |t| 
    t.integer "place_id" 
    t.string "language" 
    t.text  "text" 
    t.datetime "created_at", null: false 
    t.datetime "updated_at", null: false 
end 

add_index "descriptions", ["place_id"], name: "index_descriptions_on_place_id", using: :btree 

create_table "places", force: :cascade do |t| 
    t.float "latitude", null: false 
    t.float "longitude", null: false 
    t.datetime "created_at", null: false 
    t.datetime "updated_at", null: false 
    t.string "name",  null: false 
    t.string "categories", null: false 
end 

    add_foreign_key "descriptions", "places" 
end 

順便說一句:我可以完美實例化軌道控制檯內的地方目標,並檢查是否.valid?。我很高興如果有人可以幫助我解釋該錯誤信息,提前致謝

編輯:我沒有在我的模型文件中實施任何驗證(實際上......我想堅持測試驅動,只有測試不' t正常工作...)

回答

2

發現錯誤,相應的YAML文件試圖產生空的place對象。問題解決了。

相關問題