Hat jemand eine Idee, wie man $ httpBackend in e2e eckigen Tests mockt? Die Idee ist, XHR-Anfragen während des Tests auf travis-ci zu unterdrücken. Ich benutze Karma, um Assets und Partials aus meiner Rails-App, die auf Travis läuft, zu requirieren. Ich möchte Akzeptanztests ohne echte DB-Abfragen durchführen.
Hier ist ein Teil meiner Karma-Konfigurationsdatei:
...
files = [
MOCHA,
MOCHA_ADAPTER,
'spec/javascripts/support/angular-scenario.js',
ANGULAR_SCENARIO_ADAPTER,
'spec/javascripts/support/angular-mocks.js',
'spec/javascripts/e2e/**/*_spec.*'
];
...
proxies = {
'/app': 'http://localhost:3000/',
'/assets': 'http://localhost:3000/assets/'
};
...
Hier ist ein Teil meiner spec-Datei:
beforeEach(inject(function($injector){
browser().navigateTo('/app');
}));
it('should do smth', inject(function($rootScope, $injector){
input('<model name>').enter('smth');
//this is the point where I want to stub real http query
pause();
}));
Ich habe versucht, $ erhalten httpBackend Service über $ Injektor:
$injector.get('$httpBackend')
Aber das ist nicht das, das innerhalb Iframe verwendet wird, wo meine Tests laufen.
Der nächste Versuch machte ich wurde angular.scenario.dsl verwenden, hier ist der Code samle:
angular.scenario.dsl('mockHttpGet', function(){
return function(path, fakeResponse){
return this.addFutureAction("Mocking response", function($window, $document, done) {
// I have access to window and document instances
// from iframe where my tests run here
var $httpBackend = $document.injector().get(['$httpBackend']);
$httpBackend.expectGET(path).respond(fakeResponse)
done(null);
});
};
});
Anwendungsbeispiel:
it('should do smth', inject(function($rootScope, $injector){
mockHttpGet('<path>', { /* fake data */ });
input('search.name').enter('mow');
pause();
}));
Dies führt zu folgenden Fehler:
<$httpBackend listing> has no method 'expectGET'
Also, an diesem Punkt habe ich keine Ahnung vom nächsten Schritt. Hat jemand versucht, so etwas zu tun, ist diese Art von Stubbing wirklich möglich?
Wie konfigurieren Sie Ihr Karma, um "inject" -Funktion in Ihrer Spezifikation zu haben? Ich habe immer ReferenceError für meine Tests bekommen – wakandan