通过相同的测试传递输入数组

时间:2014-05-12 18:56:20

标签: angularjs asynchronous selenium-webdriver jasmine protractor

上下文:使用Protractor在Angular JS中进行端到端测试

目标:我想针对许多不同的值运行相同的测试。理想情况下,循环遍历值数组并为每个值运行相同的it块。

问题:由于Protractor将异步运行测试,因此在循环结束后将执行for循环内的任何测试。

例如,

var values = ['...','...'];

for (var i = 0; i < values.length; i++) {
  it('should do something good', function() {
    // some test using this particular value in the values array
  });
}

但是(假设数组中有10个项目),结果是测试运行10次,每次i的值为9,而不是0,1,2,3...预期。这与测试的异步性质有关。

我尝试过的内容:根据this stack overflow question的回答使用done()回调。

for (var i = 0; i < values.length; i++) {
  it('should do something good', function (done) {
    // some test using this particular value in the values array
    setTimeout(done, 1000);
  });
}

为什么不起作用:我收到以下错误:

/node_modules/protractor/jasminewd/index.js:44
        throw new Error('Do not use a done callback with WebDriverJS tests
              ^
Error: Do not use a done callback with WebDriverJS tests. The tests are patched to be asynchronous and will terminate when the webdriver control flow is empty.
at null._onTimeout (/Users/drew/apps/hotrod/node_modules/protractor/jasminewd/index.js:44:19)
at Timer.listOnTimeout [as ontimeout] (timers.js:110:15)

关于如何遍历值数组并对每个值运行相同测试的任何想法?感谢

1 个答案:

答案 0 :(得分:1)

找到解决方案!诀窍是将循环内容包装在一个立即调用的函数中,并在循环的每次迭代中传入一个显式参数。

检查出来:

https://stackoverflow.com/a/23635357/1526027