使用 httpbackend 测试 ngResource - 可能是未处理的拒绝错误
Testing ngResource with httpbackend - Possibly unhandled rejection error
问题
我正在尝试使用 Karma、Mocha、Chai、PhantomJS 测试以下控制器
IndexCtrl.js(简体)
app.controller('IndexCtrl', ['$scope', '$resource', function($scope, $resource) {
var methods = {
get:{
method:'GET'
}
};
var Users = $resource('/api/v1/search/:search', {},methods);
$scope.testResource = function(){
Users.get({search: 'TEST'}, function(result){
$scope.someTestValue = true;
}, function(){
console.log("hello world");
});
};
}]);
index.controller.test.js(再次简化,我还有其他非http测试)
describe('Index', function () {
var ctrl, $httpBackend;
beforeEach(module('myApp'));
beforeEach(inject(function($rootScope, $controller, $injector){
$httpBackend = $injector.get('$httpBackend');
$scope = $rootScope.$new();
ctrl = $controller('IndexCtrl', {
$scope: $scope
});
}));
describe('Search', function () {
it('Changing the override should trigger the watcher', function () {
$httpBackend.expectGET('/.*/', undefined).respond(200, {});
$scope.testResource();
$httpBackend.flush();
expect($scope.someTestValue).to.equal(true);
});
});
});
当我运行测试时,我得到以下错误。如果我注释掉冲洗线,它不会抛出这个错误,但它不能正常工作。
PhantomJS 2.1.1 (Mac OS X 0.0.0) Index Search Changing the override should trigger the watcher FAILED
the string "Possibly unhandled rejection: {\"line\":1421,\"sourceURL\":\"node_modules/angular-mocks/angular-mocks.js\",\"stack\":\"$httpBackend@node_modules/angular-mocks/angular-mocks.js:1421:90\nsendReq@webroot/js/angular.compiled.min.js:4:16511\nserverRequest@webroot/js/angular.compiled.min.js:4:12080\nprocessQueue@webroot/js/angular.compiled.min.js:5:14235\nwebroot/js/angular.compiled.min.js:5:15007\n$eval@webroot/js/angular.compiled.min.js:5:46097\n$digest@webroot/js/angular.compiled.min.js:5:43824\nflush@node_modules/angular-mocks/angular-mocks.js:1813:45\nweb-test/index.controller.test.js:18:22\ncallFn@node_modules/mocha/mocha.js:4447:25\nrun@node_modules/mocha/mocha.js:4439:13\nrunTest@node_modules/mocha/mocha.js:4936:13\nnode_modules/mocha/mocha.js:5042:19\nnext@node_modules/mocha/mocha.js:4853:16\nnode_modules/mocha/mocha.js:4863:11\nnext@node_modules/mocha/mocha.js:4787:16\nnode_modules/mocha/mocha.js:4831:9\ntimeslice@node_modules/mocha/mocha.js:82:27\"}" was thrown, throw an Error :)
package.json
{
"name": "myApp",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "mocha",
"web-test": "node ./node_modules/karma/bin/karma start karma.conf.js"
},
"author": "",
"license": "ISC",
"dependencies": {
"angular": "1.5.9",
"angular-animate": "1.5.9",
"angular-lazy-image": "^0.3.2",
"angular-resource": "1.5.9",
"angular-sanitize": "1.5.9",
"angular-typewriter": "0.0.15",
"angular-ui-router": "^0.3.2",
"body-parser": "^1.15.2",
"cookie-parser": "^1.4.3",
"elasticsearch": "^12.1.3",
"express": "^4.14.0",
"grunt": "*",
"grunt-contrib-sass": "*",
"grunt-contrib-uglify": "*",
"grunt-contrib-watch": "*",
"grunt-html2js": "*",
"grunt-notify": "*",
"ldapjs": "^1.0.1",
"request": "^2.79.0"
},
"devDependencies": {
"angular-mocks": "^1.6.0",
"chai": "^3.5.0",
"karma": "^1.3.0",
"karma-chai": "^0.1.0",
"karma-chrome-launcher": "^2.0.0",
"karma-cli": "^1.0.1",
"karma-jasmine": "^1.1.0",
"karma-mocha": "^1.3.0",
"karma-phantomjs-launcher": "^1.0.2",
"karma-requirejs": "^1.1.0",
"mocha": "^3.2.0",
"requirejs": "^2.3.2"
}
}
模组注释
这与 不同,错误不是由刷新触发的,解决方案是回滚到 angularjs 1.5.9。我已经尝试回滚到 angular 1.5.9,但无济于事。所以看在上帝的份上,如果我再失明 "marked as a duplicate"...
在 Angular 1.5.9 到 1.6.0 中似乎存在一些未处理拒绝的错误,请在您的应用程序配置中执行此操作
.config(['$qProvider', function ($qProvider) {
$qProvider.errorOnUnhandledRejections(false);
}])
问题
我正在尝试使用 Karma、Mocha、Chai、PhantomJS 测试以下控制器
IndexCtrl.js(简体)
app.controller('IndexCtrl', ['$scope', '$resource', function($scope, $resource) {
var methods = {
get:{
method:'GET'
}
};
var Users = $resource('/api/v1/search/:search', {},methods);
$scope.testResource = function(){
Users.get({search: 'TEST'}, function(result){
$scope.someTestValue = true;
}, function(){
console.log("hello world");
});
};
}]);
index.controller.test.js(再次简化,我还有其他非http测试)
describe('Index', function () {
var ctrl, $httpBackend;
beforeEach(module('myApp'));
beforeEach(inject(function($rootScope, $controller, $injector){
$httpBackend = $injector.get('$httpBackend');
$scope = $rootScope.$new();
ctrl = $controller('IndexCtrl', {
$scope: $scope
});
}));
describe('Search', function () {
it('Changing the override should trigger the watcher', function () {
$httpBackend.expectGET('/.*/', undefined).respond(200, {});
$scope.testResource();
$httpBackend.flush();
expect($scope.someTestValue).to.equal(true);
});
});
});
当我运行测试时,我得到以下错误。如果我注释掉冲洗线,它不会抛出这个错误,但它不能正常工作。
PhantomJS 2.1.1 (Mac OS X 0.0.0) Index Search Changing the override should trigger the watcher FAILED
the string "Possibly unhandled rejection: {\"line\":1421,\"sourceURL\":\"node_modules/angular-mocks/angular-mocks.js\",\"stack\":\"$httpBackend@node_modules/angular-mocks/angular-mocks.js:1421:90\nsendReq@webroot/js/angular.compiled.min.js:4:16511\nserverRequest@webroot/js/angular.compiled.min.js:4:12080\nprocessQueue@webroot/js/angular.compiled.min.js:5:14235\nwebroot/js/angular.compiled.min.js:5:15007\n$eval@webroot/js/angular.compiled.min.js:5:46097\n$digest@webroot/js/angular.compiled.min.js:5:43824\nflush@node_modules/angular-mocks/angular-mocks.js:1813:45\nweb-test/index.controller.test.js:18:22\ncallFn@node_modules/mocha/mocha.js:4447:25\nrun@node_modules/mocha/mocha.js:4439:13\nrunTest@node_modules/mocha/mocha.js:4936:13\nnode_modules/mocha/mocha.js:5042:19\nnext@node_modules/mocha/mocha.js:4853:16\nnode_modules/mocha/mocha.js:4863:11\nnext@node_modules/mocha/mocha.js:4787:16\nnode_modules/mocha/mocha.js:4831:9\ntimeslice@node_modules/mocha/mocha.js:82:27\"}" was thrown, throw an Error :)
package.json
{
"name": "myApp",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "mocha",
"web-test": "node ./node_modules/karma/bin/karma start karma.conf.js"
},
"author": "",
"license": "ISC",
"dependencies": {
"angular": "1.5.9",
"angular-animate": "1.5.9",
"angular-lazy-image": "^0.3.2",
"angular-resource": "1.5.9",
"angular-sanitize": "1.5.9",
"angular-typewriter": "0.0.15",
"angular-ui-router": "^0.3.2",
"body-parser": "^1.15.2",
"cookie-parser": "^1.4.3",
"elasticsearch": "^12.1.3",
"express": "^4.14.0",
"grunt": "*",
"grunt-contrib-sass": "*",
"grunt-contrib-uglify": "*",
"grunt-contrib-watch": "*",
"grunt-html2js": "*",
"grunt-notify": "*",
"ldapjs": "^1.0.1",
"request": "^2.79.0"
},
"devDependencies": {
"angular-mocks": "^1.6.0",
"chai": "^3.5.0",
"karma": "^1.3.0",
"karma-chai": "^0.1.0",
"karma-chrome-launcher": "^2.0.0",
"karma-cli": "^1.0.1",
"karma-jasmine": "^1.1.0",
"karma-mocha": "^1.3.0",
"karma-phantomjs-launcher": "^1.0.2",
"karma-requirejs": "^1.1.0",
"mocha": "^3.2.0",
"requirejs": "^2.3.2"
}
}
模组注释
这与
在 Angular 1.5.9 到 1.6.0 中似乎存在一些未处理拒绝的错误,请在您的应用程序配置中执行此操作
.config(['$qProvider', function ($qProvider) {
$qProvider.errorOnUnhandledRejections(false);
}])