简体   繁体   English

使用httpbackend测试ngResource-可能未处理的拒绝错误

[英]Testing ngResource with httpbackend - Possibly unhandled rejection error

Problem 问题

I am attempting to test a the following controller using Karma, Mocha, Chai, PhantomJS 我正在尝试使用Karma,Mocha,Chai,PhantomJS测试以下控制器

IndexCtrl.js (simplified) 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 (again simplified, I have other non-http tests) 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);
      });   
  });
});

When I run the test, I get the following error. 运行测试时,出现以下错误。 If I comment out the flush line, it does not throw this error, but it does not work properly. 如果我注释掉刷新行,它不会引发此错误,但不能正常工作。

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 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"
  }
}

Mods Note 模组说明

This is different from Angular 1.6.0: "Possibly unhandled rejection" error where the error was not triggered by a flush, and the solution was rolling back to angularjs 1.5.9. 这与Angular 1.6.0不同:“可能未处理的拒绝”错误 ,该错误不是由冲洗触发的,并且解决方案已回滚到angularjs 1.5.9。 I have already tried rolling back to angular 1.5.9, to no avail. 我已经尝试回滚到角度1.5.9,但无济于事。 So for the love of god if I get another blind "marked as a duplicate"... 因此,对于上帝的爱,如果我再得到另一个盲人“标记为重复” ...

In Angular 1.5.9 to 1.6.0 there seems to be some bug with unhandled rejects, do this in your app config 在Angular 1.5.9至1.6.0中,似乎存在一些未处理拒绝的错误,请在您的应用程序配置中执行此操作

.config(['$qProvider', function ($qProvider) {
    $qProvider.errorOnUnhandledRejections(false);
}])

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM