【问题标题】:JSON data for rspec testsrspec 测试的 JSON 数据
【发布时间】:2013-01-14 09:30:09
【问题描述】:

我正在创建一个接受 JSON 数据的 API,并且我想为其提供测试数据。

有没有类似于 JSON 数据工厂的东西?我想在对象和 JSON 中提供相同的数据,以便我可以检查导入是否按预期工作。

JSON 具有严格定义的结构,因此我无法调用 FactoryGirl(:record).to_json

【问题讨论】:

    标签: ruby-on-rails ruby json rspec factory


    【解决方案1】:

    在这种情况下,我将为要导入的 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,然后将其导入。

    【讨论】:

      【解决方案2】:

      其实你可以用 factorygirl 做到以下几点。

      factory :json_data, class: OpenStruct do 
         //fields
      end
      
      FactoryGirl.create(:json_data).marshal_dump.to_json
      

      【讨论】:

        【解决方案3】:

        前段时间我们实现了FactoryJSON gem 来解决这个问题。到目前为止,它对我们来说效果很好。自述文件涵盖了可能的用例。

        【讨论】:

          【解决方案4】:

          按照 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
          

          【讨论】:

          • 你把这个助手放在哪里了? rails_spec.rb?
          • @DanielCosta 我在spec/support/helpers.rb 有一个模块助手。然后在rails_helper 中我将它们包含在config.include Helpers
          • 这是一个非常方便的方法,你也可以根据需要将它内联到你的规范中,非常简单
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-01-25
          • 1970-01-01
          • 2012-07-28
          • 1970-01-01
          • 1970-01-01
          • 2017-12-09
          相关资源
          最近更新 更多