2016-04-08 10 views
0

Nach dem Intern user guide ich eine einfache Seite Objekt schrieb:Wie ketten ich interne Seitenobjektfunktionsaufrufe?

define(function(require) { 

    function ListPage(remote) { 
    this.remote = remote; 
    } 

    ListPage.prototype = { 
    constructor: ListPage, 

    doSomething: function(value) { 
     return this.remote 
     .get(require.toUrl('http://localhost:5000/index.html')) 
     .findByCssSelector("[data-tag-test-id='element-of-interest']") 
     .click().end(); 
    } 
    }; 

    return ListPage; 
}); 

Im Test möchte ich doSomething zweimal in einer Reihe nennen, wie folgt aus:

define(function(require) { 

    var registerSuite = require('intern!object'); 
    var ListPage = require('../support/pages/ListPage'); 

    registerSuite(function() { 

    var listPage; 

    return { 
     name: 'test suite name', 

     setup: function() { 
     listPage = new ListPage(this.remote); 
     }, 

     beforeEach: function() { 
     return listPage 
      .doSomething('Value 1') 
      .doSomething('Value 2'); 
     }, 

     'test function': function() { 
     // ... 
     } 
    }; 
    }); 
}); 

Allerdings, wenn ich die laufen Test, bekomme ich diesen Fehler:

TypeError: listPage.doSomething(...).doSomething is not a function

ich habe versucht, beschrieb einige Ansätze in this question, ohne Erfolg.

Antwort

1

Ein besserer Weg, um Seitenobjekte mit Intern zu implementieren, ist eher eine Hilfsfunktion als ein Befehls-Wrapper. Gruppen verwandter Hilfsfunktionen können dann zum Erstellen von Seitenobjekt-Modulen verwendet werden.

+0

Dies könnte wahr sein, aber ich bin überrascht, dass solch komplizierter Code (z. B. eine Funktion, die eine Funktion zurückgibt, die einen Befehl zurückgibt) erforderlich ist. In der Zwischenzeit versuche ich stattdessen WebdriverIO, das synchronen Code unterstützt. –