【问题标题】:Ruby on Rails Testing - ActiveRecord::StatementInvalid: PG::InvalidTextRepresentation: ERROR: malformed array literal:Ruby on Rails 测试 - ActiveRecord::StatementInvalid: PG::InvalidTextRepresentation: ERROR: malformed array literal:
【发布时间】:2019-11-28 08:45:02
【问题描述】:

我有一个项目在生产和开发中运行良好,主要是在许多测试中,但只有一个模型无法运行测试。

型号:

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) (我没有在模型上设置“序列化:cp,数组”)

但是当我运行 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 序列化有关,但我不太确定。

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

【问题讨论】:

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


    【解决方案1】:

    对于那些想出同样情况的人。问题在于测试装置的声明。 YAML 中的数组必须以这种方式声明:

    one:
      city: Premià de Mar
      cp:
        - 08400
        - 08401
    
    two:
      city: Mataró
      cp:
        - 08300
        - 08301
    

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

    【讨论】:

      猜你喜欢
      • 2014-02-08
      • 1970-01-01
      • 2012-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多