FactoryBot.define do
factory :json, class: OpenStruct do
skip_create # Don't try to persist the object
end
end
class JsonStrategy < FactoryBot::Strategy::Create
def result(evaluation)
super.to_json
end
def to_sym
:json
end
end
# Makes the function FactoryBot.json available,
# which automatically returns the hash as a json string.
FactoryBot.register_strategy(:json, JsonStrategy)
然后,我可以像这样定义实际的工厂:
FactoryBot.define do
factory :json_response, parent: :json do
# You can define any attributes you want here because it uses OpenStruct
ids { [] }
# Gets called to create the object FactoryBot uses. I return the actual Hash I want here,
# and use the available attributes defined above to fill it with data.
# class: OpenStruct from the parent class is only used so that arbitrary attributes can be used.
initialize_with do
ids.map do |id|
{
score: 90,
data: {
id: id,
},
}
end
end
end
end
最后你可以这样使用它:
FactoryBot.json(:json_response, ids: [1,2])
=> "[{\"score\":90,\"data\":{\"id\":1}},{\"score\":90,\"data\":{\"id\":2}}]"
# Or if you just need the hash:
FactoryBot.create(:json_response, ids: [1,2])
[{:score=>90, :data=>{:id=>1}}, {:score=>90, :data=>{:id=>2}}]
5条答案
按热度按时间tsm1rwdh1#
在这种情况下,我将为要导入的JSON创建fixture文件。
我还没有看到过可以使用FactoryGirl设置属性,然后将其导入JSON的方法。您可能需要创建一个Map器,它将接收Customer对象并将其呈现为JSON,然后导入它。
mwg9r5ms2#
按照Jesse的建议,在Rails5中现在可以使用
file_fixture
(docs)我只是使用一个小助手来阅读我的json fixture:
nc1teljy3#
实际上你可以用factorygirl做以下事情。
avkwfej44#
不久前我们实现了FactoryJSON gem来解决这个问题。到目前为止,它运行得很好。自述文件涵盖了可能的用例。
j1dl9f465#
这里有一些东西对我来说很好用:我想创建深度嵌套的结构,而不需要为每个嵌套指定单独的工厂;我的用例是用webmock存根外部apis; fixture不适合我,因为我需要存根各种不同的数据。
定义以下基本工厂和支持代码:
然后,我可以像这样定义实际的工厂:
最后你可以这样使用它: