How do you add a promise to the flow control queue using protractor?

angularjs, flow-control, promise, protractor

Solution

Protractor exposes WebDriverJS promises on the protractor object so you could use either the `flow.await` method or create a new promise and use `flow.execute`.

The former could be achieved something like:

flow = protractor.promise.controlFlow()

flow.await(dataBuilder.create(testData)).then( function(id) {
    testData.id = id.id;
})

And you can see an example of the latter in this blog post.

This could be done in the `it` function itself or if this is common to all your tests consider placing it in the `onPrepare` function of your protractor config.

Problem

In my test I am calling and outside library to seed data into our backend before running some ui tests using protractor. ``` '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 () { ... }); ``` As such the promise returned by the dataBuilder isn't resolved before the it() actually finishes. How can I add the promise returned by the dataBuilder into webDriver's flow control?

Original source