Ruby on Rails测试-ActiveRecord :: StatementInvalid:PG :: InvalidTextRepresentation:错误:格式不正确的数组文字:

时间:2019-07-19 10:56:59

标签: ruby-on-rails arrays postgresql testing ruby-on-rails-5

我有一个在生产和开发上都可以正常运行的项目,并且大多数情况下都可以在许多测试上运行,但是使用一个模型就无法运行测试。

型号:

create_table "cities", force: :cascade do |t|
  t.string "city"
  t.string "cp", array: true
  t.datetime "created_at", null: false
  t.datetime "updated_at", null: false
  t.string "name"
  t.string "primary_cp"
end

(请注意,“ cp”属性是一个数组,我在项目上使用Postgres) (我没有在模型上设置“ serialize:cp,Array”)

但是当我运行rails test / models / city_test.rb时,我得到的是

Error:
CityTest#test_the_truth:
ActiveRecord::StatementInvalid: PG::InvalidTextRepresentation: ERROR:  
malformed array literal: "MyString"
LINE 28: ...d_at") VALUES (980190962, 'MyString', 'MyString', 
'MyString'...
                                                          ^
DETAIL:  Array value must start with "{" or dimension information.
: DELETE FROM "homes";
DELETE FROM "categories";
DELETE FROM "volunteers";
DELETE FROM "donations";

我已经在这里搜索其他解决方案,但不能解决问题。我猜测测试环境确实与YAML序列化有关,但我不太确定。

我对开发和生产环境完全没有问题,只发生在测试环境中。

1 个答案:

答案 0 :(得分:1)

对于那些遇到相同情况的人。问题出在测试夹具的声明上。必须以这种方式声明YAML中的数组:

one:
  city: Premià de Mar
  cp:
    - 08400
    - 08401

two:
  city: Mataró
  cp:
    - 08300
    - 08301

其中“ cp”是数组。正确设置阵列可以解决此问题。