Ответ 1
Ответ на этот вопрос можно найти в этом сообщении: http://spin.atomicobject.com/2014/12/17/asynchronous-testing-protractor-angular/
То есть:
- Транспортировка завершает все команды драйвера в ControlFlow,
- когда вам нужен результат команды драйвера, вы должны использовать. then,
- когда вам не нужен результат драйвера, которого вы можете избежать. следующие инструкции должны быть в очереди в ControlFlow, иначе они будет выполняться до команд в очереди, что приведет к непредсказуемым результат. Итак, если вы хотите запустить команду тестирования без драйверов, вы должны добавить ее в .then callback или перенести тест в Promise и поставить в очередь тест в ControlFlow. См. Пример ниже.
Вот пример моего теста, который работает без. then:
log.debug('test0');
// enqueue the click
submitButton.click();
var message = $('.alert-success');
// enqueue the wait for message to be visible
browser.wait(EC.visibilityOf(message), 5000);
log.debug('test1');
// enqueue a test
expect(message.isPresent()).to.be.eventually.true;
log.debug('test2');
// a function returning a promise that does an async test (check in MongoDB Collection)
var testAccount = function () {
var deferred = protractor.promise.defer();
// Verify that an account has been created
accountColl.find({}).toArray(function (err, accs) {
log.debug('test5');
expect(err).to.not.exist;
log.debug('test6');
expect(accs.length).to.equal(1);
return deferred.fulfill();
});
return deferred.promise;
};
log.debug('test3');
// Enqueue the testAccount function
browser.controlFlow().execute(testAccount);
log.debug('test4');
Результат теперь то, что мы ожидаем:
test0
test1
test2
test3
test4
test5
test6