огурец несколько утверждений в шаге - PullRequest
1 голос
/ 10 апреля 2011

Я пытаюсь проверить один блок данных 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 Ответ

2 голосов
/ 19 апреля 2011

Вероятно, лучше сначала разбить определения шагов:

 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 

Затем вы можете повторно использовать шаги в другом месте.

Проверка «порядок» легко реализовать, так как выпросто проверка одного элемента.

Для двух других вы действительно просто проверяете наличие элементов в массиве, например:

actual_values.should == expected_values

Если это не удастся, RSpec предоставит вам отчетпоказывая, как отличаются массивы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...