我正在尝试验证从服务器
收到的一个json数据块json包含有关一堆订单的信息。每个订单包括每个部分的成本,税收和总额。并且严格要求每个订单包含4个部分。每个订单都有三种税种和总额。
我有一个看起来像这样的步骤
And "standardorder" includes parts "1..4", taxes "1..3" and total
和步骤实现如下。 @ jsonhelper.json是上一步传递的共享状态(一个订单的json)。
And /^"([^"]*)" includes parts "([^"]*)", taxes "([^"]*)" and total$/ do |arg1, arg2, arg3|
json = @jsonhelper.json
validkeys = ["total"]
parts = arg2.split('..').map{|d| Integer(d)}
(parts[0]..parts[1]).each do |i|
validkeys.push "p#{i}"
end
taxes = arg3.split('..').map{|d| Integer(d)}
(taxes[0]..taxes[1]).each do |i|
validkeys.push "t#{i}"
end
validkeys.each do |key|
json[arg1].keys.include?(key).should be_true
end
end
现在这个脚本工作正常,但是如果缺少任何一个键,它就不会说明缺少哪一个。它通过或失败,因为每个键都会迭代断言。
我想知道是否有可能发送找到结果流的密钥。因此,我的目的是知道哪些键可以正常,哪些键失败,哪一个跳过。因为在json中不期望这样的键顺序。
提前致谢。
答案 0 :(得分:2)
最好先拆分步骤定义:
And "standardorder" should be received
And the order should include parts 1 to 4
And the order should include taxes 1 to 3
And the order should include the total
然后你可以重复使用其他地方的步骤。
'order'检查易于实现,因为您只需检查一个元素。
对于其他两个,你实际上只是检查数组中项目的存在,例如:
actual_values.should == expected_values
如果失败,RSpec会给你一份报告,说明数组的不同之处。