对于我的情况,我希望能够验证我的验证功能是否正常运行。因此,这意味着我需要能够提供正在验证的json对象的所有可能输入的组合。我期望的json具有以下格式,并且需要以下类型和键:
{
"id": str,
"name": str,
"item_list": list,
"language_list": list,
"number", int
}
所以一个例子是:
myDict= dict({
"id": 'test_id',
'name': 'test_name',
'item_list': ['foo', 'bar'],
'language_list': ['spanish', 'english'],
'number': 2
})
我目前有类似以下的内容,以测试是否正确处理了错误的输入。
({ @pytest.mark.parametrize("test_input", [
({
"id": 1,
"name": "test_name",
"item_list": ["foo", "bar"],
"language_list": ["spanish", "english"],
"number": 2
}),
({
"id": ["some", "list"],
"name": "test_name",
"item_list": ["foo", "bar"],
"language_list": ["spanish", "english"],
"number": 2
}),
({
"id": {"another_key": "another_value"},
"name": "test_name",
"item_list": ["foo", "bar"],
"language_list": ["spanish", "english"],
"number": 2
}),
.
.
.
])
def test_validate_json_error(test_input):
# dont worry about the below. Im just handling the input
with pytest.raises(CustomFlaskError):
validate_json(test_input)
})
我希望能够对字典中的所有键执行此操作。那么有没有一种方法可以更简洁地做到这一点?因此,也许将myDict的正确示例定义为一个全局变量,然后在每个参数中对其进行一些更改。如下所示:
({ @pytest.mark.parametrize("test_input", [
(myDict["id"] = 1),
(myDict["id"] = ["some", "list"]),
(myDict["id"] = {"another_key": "another_value"}),
.
.
.
])
def test_validate_json_error(test_input):
# dont worry about the below. Im just handling the input
with pytest.raises(CustomFlaskError):
validate_json(test_input)
})
这看起来要好得多,尤其是那些带有大量键的json对象。
答案 0 :(得分:0)
我知道了。
我只需要有一个执行变量浅表副本的函数,该函数也将要在json中更改的键替换为我想要替换的值。它返回更改后的浅表副本,然后将其用于参数化。
因此,以下方法可行
x = require('test.js')
if ( x has function defined myFunc ) {
if ( function myFunc in x has 3 arguments) {
"OK"
} else { "Expect 3 params"}
} else {
"test.js does not expose myFunc" }