gpt4 book ai didi

ruby - 减少 RSpec 中 JSON 测试输入的重复

转载 作者:行者123 更新时间:2023-11-28 20:42:53 25 4
gpt4 key购买 nike

我正在开发一个从文件中读取 JSON 内容并使用它们生成输出的应用程序。我正在使用 RSpec 进行测试,我的规范到处都是 JSON 文字内容。有大量重复,文件很大且难以阅读,而且已经到了添加新案例非常痛苦的地步,这让我不愿涵盖角落案例。

在我的规范中重用大部分 JSON 是否有好的策略?我想将 JSON 存储在不在规范文件中的某个地方,这样我就可以专注于规范中的测试逻辑,并且只了解我使用的是哪个示例 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

最佳答案

我们有一个非常相同的问题。我们通过创建以下助手解决了这个问题:

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 }

当然,您可以根据自己的喜好/需要对其进行调整。例如,我们 stub 外部服务 json 响应,因此我们创建了 get_service_response(service_name, request_name, response_type) 帮助程序。当我们使用 get_service_response('cdl', 'reg_lookup', 'invalid_reg')

时,它现在更具可读性

假设您将 json 放入“create_data_input”

关于ruby - 减少 RSpec 中 JSON 测试输入的重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25204662/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com