黄瓜多步断言一步到位

时间:2011-04-10 10:19:22

标签: cucumber

我正在尝试验证从服务器

收到的一个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中不期望这样的键顺序。

提前致谢。

1 个答案:

答案 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会给你一份报告,说明数组的不同之处。