tests unitaires :appel http dans le contrôleur à l'intérieur de la directive
-
26-12-2019 - |
Question
describe("File Upload directive", function() {
var elm, scope,httpBackend , controller , isolateScope;
beforeEach(angular.mock.module("fileApp"));
beforeEach(angular.mock.inject(function($rootScope, $compile , $httpBackend) {
elm = angular.element("<div file-upload base-upload-url='files/' ></div>");
httpBackend = $httpBackend;
scope = $rootScope;
httpBackend.whenGET("fileUploadTemplate.html").respond(true);
$compile(elm)(scope);
controller = elm.controller;
scope.$digest();
}));
it("should upload selected file",function(){
httpBackend.flush();
isolateScope = elm.isolateScope();
expect(isolateScope).toBeDefined();
isolateScope.selectedFiles=[{"webkitRelativePath":"","lastModifiedDate":"2014-05-26T11:15:55.000Z","name":"a.csv","type":"text/csv","size":131}];
var index = 0;
httpBackend.expectPOST("files/").respond({"fileId":67603});
expect(isolateScope.uploadResult.length).toBe(1);
//httpBackend.flush();
});
});
Maintenant, j'ai ici des situations :
- Si je commente
httpBackend.flush()
au début deit
bloc, isolateScope estundefined
. - Si je commente
httpBackend.flush()
au bout duit
bloquer, leisolateScope.uploadResult.length = 0
ce qui suggèrehttpPOST
ne s'est pas exécuté correctement comme prévu (httpBackend.flush n'est jamais appelé après l'appel http).
3.Si je garde les deux httpBackend.flush()
(ce qui n'est pas censé être fait), j'obtiens l'erreur comme prévu : Error: No pending request to flush !
.
Quelqu'un peut-il me guider s'il vous plaît ?Je suis un débutant en karma.
Merci d'avance.
La solution
Essayez également d'ajouter ces lignes dans le bloc de description.
afterEach(function() {
$httpBackend.verifyNoOutstandingExpectation();
$httpBackend.verifyNoOutstandingRequest();
});
ou vous n'avez peut-être pas appelé la fonction dans la directive qui a instancié le post-appel, sinon cela devrait fonctionner.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow