Использовать условные логи c в наброске сценария со списками - PullRequest
1 голос
/ 31 марта 2020

Мы используем каратэ 0.9.5. Мы хотели бы создать динамический набросок сценария c, используя условные логики c. Мы хотели бы получить города для списка регионов, и это для списка стран. Условная логика c используется только в поисках городов. Что мы сделали:

Main.feature:

Scenario Outline:
* def countries = call read('GetRegionsWithTowns.feature') { countryId: '#(<id>)' }
Examples:
  |countriesList|

GetRegionsWithTowns.feature:

Scenario:
* def fun =
  """
  function(regions) {
    for (i = 0; i < regions.length; i++) {
      var region = regions[i];
      if(region['name'] && region['name'].contains('alabama')){
        karate.log('***smth');
      }
      else{
        var regionId = region['region_id'];
        karate.call('GetTowns.feature', [regionId]);
      }
    }
  }
  """
* def regions = call read('GetRegions.feature') { countryId: '#(countryId)' }
* def result = call fun(regions)

GetRegions.feature

Scenario:
 Given url 'someurl'
 And path countryId, 'regions' 
 When method get
 Then status 200

GetTowns.feature

Scenario:
 Given url 'someurl'
 And path regionId, 'towns'
 When method get
 Then status 200

Ошибка

 GetTowns.feature:16 (the line with "And path regionId, 'towns'") - javascript evaluation failed: regionId, ReferenceError: "regionId" is not defined in <eval> at line number 1

Мы не можем понять, что мы делаем неправильно? Любая помощь приветствуется, спасибо

1 Ответ

1 голос
/ 31 марта 2020

Я думаю, что это необходимо для изменения:

karate.call('GetTowns.feature', { regionId: regionId });

Я думаю, что вы чрезмерно усложняете свои тесты.

  • Я бы постарался избежать call, поскольку возможно.
  • Любые переменные, определенные в родительских объектах, будут видны «вызываемым» объектам, поэтому вам не нужно передавать все данные в качестве аргументов
  • Избегайте JS кода, особенно циклов, насколько это возможно по возможности, см .: https://github.com/intuit/karate#loops
...