我使用Ruby On Rails和PostgreSQL数据库。出于性能原因,我使用了一个jsonb-field和一个哈希数组,而不是将其提取到特定的表中。在真实的世界中,这个斑点看起来像[ { "row": 1, "price": 0, "column": 1, "status": 1, "index_row": 1, "contingency": 0, "index_column": 1 }, { "row": 1, "price": 0, "column": 2, "status": 1, "index_row": 1, "contingency": 0, "index_column": 2 }... ]
并且工作正常。
现在,我试图增加测试覆盖率,并注意到,我不能使用标准fixture方法创建哈希数组。假设如下:
CREATE TABLE IF NOT EXISTS public.circles
(
id bigint NOT NULL DEFAULT nextval('circles_id_seq'::regclass),
blob jsonb
)
fixture文件circles.yml包含以下内容:
templatecircle_1:
blob: <%= [1, 2] %>
这在运行bin/rails测试时可以正常工作。
templatecircle_1:
blob: {"abc": "def"}
这也正如预期的那样。
然而,在这方面,
templatecircle_1:
blob: <%= [1, {"abc": "def"}] %>
返回ActiveRecord::Fixture::fixture错误:
请注意,YAML必须使用空格一致地缩进。标签是不允许的。错误:():在分析第2行第11列的流节点时未找到预期的节点内容
我甚至尝试使用如下的变通方法:
templatecircle_1:
blob: <%= JSON.parse("[1, {\"abc\": \"def\"}]") %>
这会产生同样的错误。
有没有人有一个想法,我如何在RoR fixtures中创建一个哈希数组?
1条答案
按热度按时间kdfy810k1#
要在YAML fixtures文件中定义“array of hashes”字段,请对每个数组元素使用
-
表示法,对每个哈希键/值对使用:
表示法。不需要ERB语法或JSON解析。就是这样的结构:之后,您可以在测试中调用
正如你所看到的,它将被自动解析
对于
[1, {"abc": "def"}]
,结构为:在Ruby中:
也可以使用这样的语法(只需从原始尝试中删除ERB):
在Ruby中:
如果由于某些原因仍然需要ERB,可以使用
to_json
方法在Ruby中: