2017-09-29 1 views
0

Ich schreibe gerade einen Integrationstest mit Mocha, Chai und WebdriverIO. Die WebdriverIO Syntax einer Kette von Versprechen erfordert über den Browser zu navigieren, ein Beispiel davon ist unten:Wie verkette ich Versprechen durch einen Rückruf in JavaScript?

it('sign in and out test', function() { 
    return client 
    .url(Page.url) 
    .pause(20000) 
    .waitForVisible(HomePage.signInDropdown, 10000) 
    .click(HomePage.signInDropdown) 
} 

Dies führt zu langen Codeblöcke mit jedem Schritt explizit angelegt. Da einige der Schritte (wie An- und Abmelden) häufig in verschiedenen Tests verwendet werden, möchte ich diese Codeschnipsel durch Rückrufe modularisieren. Allerdings ist die folgende Syntax, die ohne verschachtelten Rückruf funktioniert, schlägt fehl:

function myCallback(){ 
    console.log('This is where I''d add promises'); 
} 

it('sign in and out test',function() { 
    return client 
    .url(Page.url) 
    .pause(20000) 
    .then(function() { 
     myCallback(); 
    } 
    .waitForVisible(HomePage.signInDropdown, 10000) 
    .click(HomePage.signInDropdown) 
} 

Die folgende andere Syntax in der Callback nicht auch:

function myCallback(){ 
    return client 
    .url(Page.url) 
    console.log('This is a callback using return'); 
} 

Da Versprechen meist Rückrufe ersetzen soll, wird Ist es in diesem speziellen Fall möglich, die Versprechenskette durch einen Rückruf fortzusetzen?

+0

Bitte beschreiben "versagt". Gibt es irgendwelche Fehler auf der Konsole I (anders als nicht erreichbaren Code nach return-Anweisung)? Versionen von 'myCallback', die kein Versprechen (erste Syntax) zurückgeben, halten die Verarbeitung der Versprechenskette nicht aufrecht. Dokumentation sagt 'URL' gibt eine Zeichenkette zurück. Ist es falsch oder irreführend? – traktor53

Antwort

0

myCallback() ist nicht return ed von .

.then(function() { 
    // `return` value from `myallback()` 
    return myCallback(); 
}) 
+0

was ist falsch mit '.then (myCallback)': p –

+0

@JaromandaX Hat nicht gesagt, dass irgendetwas "falsch" mit '.then (myCallback)' war. – guest271314

+0

Ich weiß ... nur wundern, warum Sie es nicht verwenden würden: p –

-1

nach logout versprechen lösen wir müssen andere arbeiten in der kette.

diese Bitte überprüfen Sie,

function myCallback(){ 
    return client 
    .url(Page.url) 
} 

it('sign in and out test',function() { 
    return client 
    .url(Page.url) 
    .pause(20000) 
    .then(function() { 
     myCallback() 
     .waitForVisible(HomePage.signInDropdown, 10000) 
     .click(HomePage.signInDropdown); 
    } 
} 
Verwandte Themen