Sto testando Goniometro con una piccola app AngularJS.
Questa è la prova:
describe('Testing Protractor', function() {
var draftList;
it('should count the number of drafts', function() {
browser.get('#/');
draftList = element.all(by.repeater('newsletter in drafts'));
expect(draftList.count()).toEqual(2);
});
});
Controller:
angular.module('myApp.controllers', []).
controller('DraftsCtrl', ['$scope', 'Draft', function($scope, Draft) {
$scope.drafts = Draft.query();
}])
Progetto di servizio:
angular.module('myApp.services', ['ngResource']).
factory('Draft', ['$resource',
function($resource) {
return $resource('api/drafts/:id')
}])
esecuzione di questo test con risultati Goniometro il seguente errore:
Error: Timed out waiting for Protractor to synchronize with the page after 11 seconds
Tuttavia, se nel controller cambio questa linea:
$scope.drafts = Draft.query();
a questo:
$scope.drafts = [];
Il test ha esito negativo come previsto, ma ancora più importante: non timeout.
Con query() abilitato, sia quando si esegue l'app manualmente in un browser e quando si guarda la finestra del browser aperta da Goniometro, i dati restituiti dall'API vengono visualizzati correttamente da un ripetitore.
Perché il goniometro non è in grado di sincronizzarsi con la pagina quando il servizio sta comunicando con l'API?
AngularJS è v1.2.0-rc3. Il goniometro è v0.12.0.
Grazie, proverò questo fuori più tardi e ti faccio sapere se ha funzionato. In realtà ho letto il problema di GitHub prima di postare qui, ma avevo l'impressione che la soluzione alternativa fosse necessaria solo quando si esegue il polling di un'API a intervalli regolari che la mia app di test non sta eseguendo. Invia solo la richiesta API una volta, quando il controller è inizializzato. –
Questa era davvero la soluzione corretta. Poiché Protractor 0.12.0 espone l'istanza di Goniometro come 'browser', è bastato aggiungere semplicemente' browser.ignoreSynchronization = true; 'prima di' element.all (by.repeater ('...')); '. –
Funziona perfettamente! – softvar