Как я могу получить доступ к переменной внутри многошагового определения шага? - PullRequest
0 голосов
/ 06 марта 2019

В настоящее время я пытаюсь определить многошаговое определение шага в Cucumber (для Ruby), но у меня возникают проблемы с использованием переменной в одном из подэтапов. Ниже я пытаюсь использовать переменную «policy_name» в последнем подэтапе, но не могу заставить Cucumber распознавать его по значению переменной, вместо этого он продолжает использовать его как строку.

 Given("I should NOT be able to go back using the browser back button 
 after doing something {string}") do |policy|

   step 'I click on "something"'
   step 'I "do this" via computer'
   step 'I click on the browser back button'

   policy_name = case policy
   when "policy1" then "something1"
   when "policy2" then "something2"
   end

   step 'I should be on the "Specified" page 
   for #{policy_name}'
 end

Ответы [ 2 ]

0 голосов
/ 08 марта 2019

Не пишите такие шаги и не вкладывайте шаги, вы просто попадете в беспорядок. Также данные предназначены для настройки состояния, а не для выполнения каких-либо действий.

Если у вас есть такой сложный шаг, у вас есть два варианта лучше, чем этапы вложения

  1. Разбейте шаг на более простые шаги
  2. Сложите сложность из определений шагов в вспомогательные методы

Наличие таких шагов, как «Когда я что-то нажимаю», является контрпродуктивным. Этот шаг все о том, КАК что-то сделано. Сценарии должны быть о том, что вы делаете, и почему это важно. Функции и сценарии предназначены не для программирования, а для описания поведения и должны быть очень простыми. Так что вы должны писать что-то вроде

Scenario: When I foo then the back button is disabled
  Given ...
  When I foo
  Then the back button should be disabled

примером для моего банка будет

Scenario: Smile login disables back button
  Given I am logged into smile banking
  When I try and use the back button
  Then I should see the back button disabled warning

Наконец, каждое определение шага должно быть просто вызовом вспомогательного метода. например,

Given 'I am logged into smile banking' do
  # NOTE: both params are also helper methods
  login(site: smile_banking, user: create_user)
end

это позволяет перенести всю сложность из огурца в код. Код может справиться со сложностью, огурец не может.

0 голосов
/ 07 марта 2019

Вы используете одинарные или двойные кавычки? Двойные кавычки допускают интерполяцию, в то время как одинарные кавычки будут просто использовать содержимое без перевода каких-либо переменных. "#{policy_name}" должно работать, в то время как '#{any_variable}' не должно работать.

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