我正在开发一个从文件中读取JSON内容并使用它们来生成输出的应用程序。我正在使用RSpec进行测试,我的规格遍布JSON文字内容。有大量的重复,文件很大,难以阅读,并且它已经到了添加新案例如此痛苦的地步,它让我无法覆盖角落案件。
在我的规范中,是否有一个很好的策略可以重用大部分JSON?我想将JSON存储在spec文件中不存在的位置,因此我可以专注于规范中的测试逻辑,并且只需要了解我使用的JSON示例。
我理解如果测试难以编写,我可能需要重构应用程序,但在我有时间做到这一点之前,我需要涵盖这些测试用例。
以下是该应用程序的一个修改示例。我必须加载许多不同的JSON格式的字符串,这些字符串要大得多,而且要复杂得多:
RSpec.describe DataGenerator do
describe "#create_data" do
let(:input){
'{ "schema": "TEST_SCHEMA",
"tables": [
{ "name": "CASE_INFORMATION",
"rows": 1,
"columns": [
{ "name": "case_location_id", "type": "integer", "initial_value": "10000", "strategy": "next" },
{ "name": "id", "type": "integer", "delete_key": true, "initial_value": "10000", "strategy": "next" }
]
}
]
}'
}
it "generates the correct number of tables" do
generator = DataGenerator.new(input)
expect(generator.tables.size).to eq 1
end
end
end
答案 0 :(得分:1)
我们遇到了同样的问题。我们通过创建以下帮助程序来解决它:
module JsonHelper
def get_json(name)
File.read(Rails.root.join 'spec', 'fixtures', 'json', "#{name}.json")
end
end
我们将所有json移动到spec/fixtures/json
文件夹中的文件中。现在,您将能够将其用作:
include JsonHelper
let(:input){ get_json :create_data_input }
当然,你可以根据自己的喜好调整它。例如,我们存储了外部服务json响应,因此我们创建了get_service_response(service_name, request_name, response_type)
帮助器。当我们使用get_service_response('cdl', 'reg_lookup', 'invalid_reg')
假设您将json放入'create_data_input`