Rails模型测试:错误:列[..]中的空值违反非空约束

时间:2016-04-06 11:21:52

标签: ruby-on-rails postgresql ruby-on-rails-4

我正在构建一个Rails 4(4.2.6)应用程序,现在我想为一个地方指定一些Minitest测试。'代表兴趣点的模型在传单 - 地图上打印。作为DB我们通过' pg'使用Postgres。宝石(无论如何都与测试无关)。不幸的是,即使像下面这样的简单测试也会在执行bundle exec rake test:models

时导致错误
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

顺便说一句:我可以在rails控制台中完美地实例化一个位置对象,并检查.valid?是否正确。如果有人能帮我解释错误信息,我很高兴,提前谢谢

编辑:我没有在我的模型文件中实现任何验证(实际上......我想继续测试驱动,只有测试不能正常工作......)

1 个答案:

答案 0 :(得分:2)

发现错误,相应的YAML文件试图生成空place个对象。问题解决了。