вторая особенность не могла видеть определенную переменную в первой функции при цикле в коде js - PullRequest
1 голос
/ 14 июня 2019

У меня есть один сценарий, который должен зациклить массив в качестве параметра запроса и передать несколько отдельных файлов последовательных объектов, я кодирую это с помощью цикла javascript, однако я обнаружил, что вторая функция не может видеть переменную, определенную впервая функция.

test1.feature

Feature:  test1.feature

  Scenario:  test1.feature
    * def batch = 'define batch in test1 feature'
    * print ' test1 feature print batch: ',batch

test2.feature

Feature: test2 feature

  Scenario:  test2 feature
    * print 'print batch in test2 feature: ', batch

цикл.js

function fn(arr){
    for (var i = 0; i < arr.length; i++) {
        // var labName = arr[i];
        var res1 = karate.call('test1.feature');
        var res2 = karate.call('test2.feature');
    }
}

demo.feature

Feature: 循环读取所有的实验项目

  Scenario: 循环读取所有实验项目-配置文件

    * def arr = ['a','b']
    * def fun = read('loop.js')
    * call fun(arr)

, чтобы запустить его, моему test2.feature требуется значение 'batch' вtest1.feature при циклическом вызове javascript, однако пакет не может быть виден в test2.feature

Ответы [ 2 ]

0 голосов
/ 14 июня 2019

Да по умолчанию, вы не можете видеть переменные от одной функции к другой.Это, очевидно, очень хорошая вещь.

Я также рекомендую вам не использовать циклы JS, насколько это возможно.Пожалуйста, ознакомьтесь с документацией здесь: https://github.com/intuit/karate#loops

Если вы используете ключевое слово call , переменные функции "звонка" будут доступны в функции "звонка".Этого не происходит, если вы используете karate.call() в JS.Поэтому вы должны вручную передать нужные переменные следующим образом:

var res1 = karate.call('test1.feature', { batch: batchIfDefined });
0 голосов
/ 14 июня 2019

Используйте karate.call(fileName, [arg]), если вы хотите передать переменные. arg должен быть json, если вам нужно более одной переменной.

...