如何使用量角器向流量控制队列添加承诺?

C D*_*ter 15 flow-control promise angularjs protractor

在我的测试中,我在调用和外部库之前将数据播种到我们的后端,然后使用量角器运行一些ui测试.

'use strict'

var dataBuilder = require('data_builder.js');

describe('test', function () {
  var testData = {
    name: 'foo',
    title: 'bar',
    ...
  };

  beforeEach(function () {
    //create test data on the backend
    dataBuilder.create(testData).then(function (id) {
      testData.id = id.id;
    });
  });



  it('test something', function () {
    ...
  });
Run Code Online (Sandbox Code Playgroud)

因此,在it()实际完成之前,dataBuilder返回的promise未得到解决.如何将dataBuilder返回的promise添加到webDriver的流控制中?

ada*_*amK 15

量角器在量角器对象上公开WebDriverJS承诺,因此您可以使用该flow.await方法或创建新的承诺和使用flow.execute.

前者可以实现如下:

flow = protractor.promise.controlFlow()

flow.await(dataBuilder.create(testData)).then( function(id) {
    testData.id = id.id;
})
Run Code Online (Sandbox Code Playgroud)

你可以在这篇博文中看到后者的一个例子.

这可以在it函数本身中完成,或者如果这对于所有测试都是通用的,请考虑将其放在onPrepare量角器配置的函数中.

  • 我使用这种方法,除了我使用`browser.controlFlow().await(...)`速记器现在支持的简写,效果很好! (2认同)

a-b*_*kov 12

在我的量角器测试中,我使用以下模式在webDriver的流控件中添加了一些东西.如果从这些"各种语句"创建并返回一个promise,则promise将被正确地插入到控制流中.

browser.controlFlow().execute(function() {
    // various statements
});
Run Code Online (Sandbox Code Playgroud)