Karma test : HttpBackend wrong error message thrown
labrute opened this issue · comments
Hi,
I m using es6-promise for my karma tests and i have discovered and strange behavior on with jasmine tests.
This bug appear when I'm catching the http error in my code.
Example :
Code
this.http.post("api/persons", person)
.then(() => {
console.log("Saved");
}, (error: IHttpPromiseCallbackArg<any>) => {
console.log("Error");
});
Test
$httpBackend.expectPOST('api/persons', null).respond(200);
$httpBackend.flush();
I'm using angular mock for all my backend tests, and if the parameter is not the expected one I have this error :
Error: No pending request to flush ! (line 1852)
flush@node_modules/angular-mocks/angular-mocks.js:1852:83
invoke@node_modules/angular/angular.js:5040:24
WorkFn@node_modules/angular-mocks/angular-mocks.js:3183:26
inject@node_modules/angular-mocks/angular-mocks.js:3150:28
eval code
eval@[native code]
evaluate@node_modules/systemjs/dist/system.src.js:2818:16
node_modules/systemjs/dist/system.src.js:3586:29
dynamicExecute@node_modules/systemjs/dist/system.src.js:1142:30
doEvaluate@node_modules/systemjs/dist/system.src.js:1089:27
ensureEvaluate@node_modules/systemjs/dist/system.src.js:997:23
node_modules/systemjs/dist/system.src.js:610:28
tryCatch@node_modules/es6-promise/dist/es6-promise.auto.js:416:20
invokeCallback@node_modules/es6-promise/dist/es6-promise.auto.js:431:21
publish@node_modules/es6-promise/dist/es6-promise.auto.js:399:21
flush@node_modules/es6-promise/dist/es6-promise.auto.js:126:13
Now, if I remove the catch, I have the expected message :
Error: Expected POST api/persons with different data
My environnement :
"angular": "1.6.6",
"es6-shim": "0.35.3",
"systemjs": "0.20.19"
"angular-mocks": "^1.6.7",
"gulp": "3.9.1",
"karma": "^1.7.1",
"karma-chrome-launcher": "^2.2.0",
"karma-coverage": "^1.1.1",
"karma-jasmine": "^1.1.1",
"karma-phantomjs-launcher": "^1.0.4",
"karma-sourcemap-loader": "^0.3.7",
"phantomjs-prebuilt": "^2.1.16",
"run-sequence": "2.2.0",
"systemjs-builder": "0.16.12",
"tslint": "3.15.1",
"typescript": "1.8.10"
$ npm -v
3.10.10
$ node -v
v6.9.5
Thx for your help.
I have updated es6-promise to v4.2.4 and the problem is the same :
Error: No pending request to flush ! (line 1852) flush@node_modules/angular-mocks/angular-mocks.js:1852:83 invoke@node_modules/angular/angular.js:5040:24 WorkFn@node_modules/angular-mocks/angular-mocks.js:3183:26 inject@node_modules/angular-mocks/angular-mocks.js:3150:28 eval code eval@[native code] evaluate@node_modules/systemjs/dist/system.src.js:2818:16 node_modules/systemjs/dist/system.src.js:3586:29 dynamicExecute@node_modules/systemjs/dist/system.src.js:1142:30 doEvaluate@node_modules/systemjs/dist/system.src.js:1089:27 ensureEvaluate@node_modules/systemjs/dist/system.src.js:997:23 node_modules/systemjs/dist/system.src.js:610:28 tryCatch@node_modules/es6-promise/dist/es6-promise.auto.js:409:20 invokeCallback@node_modules/es6-promise/dist/es6-promise.auto.js:424:21 publish@node_modules/es6-promise/dist/es6-promise.auto.js:398:21 flush@node_modules/es6-promise/dist/es6-promise.auto.js:128:13