如何解决AngularJS单元测试中的承诺

jha*_*amm 6 javascript unit-testing promise jasmine angularjs

我正在使用基本的karma/jasmine设置来测试我的Angular代码.这是我的测试:

var $controllerConstructor, ctr, mockSuperheroData, scope, deferred, q;

describe('main controller', function() {
   var $controllerConstructor, ctr, mockSuperheroData, scope, deferred, q;


   beforeEach(inject(function($controller, $rootScope, $q) {
     scope = $rootScope.$new();
     $controllerConstructor = $controller;
     q = $q;
     mockSuperheroData = {
       getSuperheroes: function() {
         deferred = q.defer();
         return deferred.promise;
       }
     };
     ctr = $controllerConstructor('MainCtrl', {$scope: scope, $location: {}, superheroService: mockSuperheroData, keys: {}});
   }));

   it('should set the result of getResource to scope.heroes', function() {
     scope.getHeroes();
     expect(scope.heroes).toBe(100);
   });
}
Run Code Online (Sandbox Code Playgroud)

scope.getHeroes()调用mockSuperheroData.getSuperheroes()正在返回承诺的人.如何强制承诺在单元测试中返回我想要的内容?我在哪里可以接受嘲笑其回报的承诺?

Ber*_*rgi 4

如何强制承诺在单元测试中返回我想要的内容?

基本上你需要调用resolveDeferred

deferred.resolve(100);
Run Code Online (Sandbox Code Playgroud)

您可以将其直接放在return deferred.promiseasynchronous 之前或中setTimeout