我正在 Grails 中编写一个测试,以确保来自客户端的传入 JSON 包含所有必需的字段。地图看起来像:
def map = [
customer: [
firstName: 'John',
lastName: 'Doe',
id: '123',
],
orderNumber: '123456',
paymentInfo: [
type: 'paypal',
amount: '1200',
currency: 'USD'
]
]
所以换句话说,customer
和paymentInfo
键是映射本身与子键。
在我的测试中,我想删除每个键和子键以确保输入验证正常工作。我做了这样的事情:
// test 1
map.remove('orderNumber')
def result = service.performAction(map)
assert result == ServiceCall.ValidationError
// test 2
map.remove('customer.firstName')
def result = service.performAction(map)
assert result == ServiceCall.ValidationError
测试 1 正常工作并正确删除了orderNumber
密钥,但测试 2 没有删除firstName
子密钥。我知道我可以使用map.customer.remove(firstName)
它并且它会正确删除子键,但是我试图使测试足够通用,以便我只需要传入一个字符串数组,它们的键和子键将被正确删除,例如:
def array = ['orderNumber', 'customer.firstName', 'customer.lastName', etc...]
array.each {
map.remove(it)
def result = service.performAction(map)
assert result == ServiceCall.ValidationError
}
是否可以通过这种方式删除子项,如果可以,我该怎么做?