【发布时间】:2013-01-14 09:30:09
【问题描述】:
我正在创建一个接受 JSON 数据的 API,并且我想为其提供测试数据。
有没有类似于 JSON 数据工厂的东西?我想在对象和 JSON 中提供相同的数据,以便我可以检查导入是否按预期工作。
JSON 具有严格定义的结构,因此我无法调用 FactoryGirl(:record).to_json。
【问题讨论】:
标签: ruby-on-rails ruby json rspec factory
我正在创建一个接受 JSON 数据的 API,并且我想为其提供测试数据。
有没有类似于 JSON 数据工厂的东西?我想在对象和 JSON 中提供相同的数据,以便我可以检查导入是否按预期工作。
JSON 具有严格定义的结构,因此我无法调用 FactoryGirl(:record).to_json。
【问题讨论】:
标签: ruby-on-rails ruby json rspec factory
在这种情况下,我将为要导入的 JSON 创建夹具文件。像这样的东西可以工作:
json = JSON.parse(File.read("fixtures/valid_customer.json"))
customer = ImportsData.import(json)
customer.name.should eq(json["customer"]["name"])
我还没有看到可以使用 FactoryGirl 设置属性,然后将其导入 JSON 并导入的东西。您可能需要创建一个映射器,该映射器将获取您的 Customer 对象并将其呈现为 JSON,然后将其导入。
【讨论】:
其实你可以用 factorygirl 做到以下几点。
factory :json_data, class: OpenStruct do
//fields
end
FactoryGirl.create(:json_data).marshal_dump.to_json
【讨论】:
前段时间我们实现了FactoryJSON gem 来解决这个问题。到目前为止,它对我们来说效果很好。自述文件涵盖了可能的用例。
【讨论】:
按照 Jesse 的建议,现在您可以在 Rails 5 中使用 file_fixture (docs)
我只是使用一个小助手来读取我的 json 固定装置:
def json_data(filename:)
file_content = file_fixture("#{filename}.json").read
JSON.parse(file_content, symbolize_names: true)
end
【讨论】:
spec/support/helpers.rb 有一个模块助手。然后在rails_helper 中我将它们包含在config.include Helpers