2015-12-20 7 views
2

Как написано в документации Protractor ControlFlow - асинхронные вызовы WebDriver автоматически сохраняются в потоке управления и выполняются в определенном порядке. На самом деле кажется, что такой подход - это просто синтаксический сахар, чтобы избежать явно написанных «тогда» цепей. Но когда мне нужно явно включить функцию async в очередь Flow Flow? Представьте себе, что у меня есть кусочки коды:Что должно быть указано в Protractor ControlFlow явно?

myAsync(xxx).then(function() { 
    doSomething(); 
    return; 
    }); 

и этот код находится в середине теста Транспортир/Жасмин так есть утверждает, над ним и ниже; Должен ли я сделать что-то вроде:

flow.execute(myAsync); 

, и если да, то где я должен поставить раздел «затем» в этом случае?

ответ

1
it('blah', function() { 
    browser.get('something'); 
    expect(element('foo').getText()).toBe('bar'); 

    var myAsync = function() { 
    // if your async function doesn't return a promise, make it one 
    var deferred = protractor.promise.defer() 
    // do some async stuff in here and then reject or fulfill with... 
    if (error) { 
     deferred.reject(error) 
    else { 
     deferred.fulfill(value); 
    } 
    return deferred.promise; 
    }; 

// hook into the controlFlow and execute the async thing so you can check after 
browser.controlFlow().execute(myAsync); 
expect(element('foo').getText()).toBe('baz'); 

// or check the return value of the promise 
browser.controlFlow().execute(myAsync).then(function(result) { 
    expect(result).toBe('something'); 
}); 
Смежные вопросы