Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 角度测量中的承诺测试_Angularjs_Jasmine_Karma Runner - Fatal编程技术网

Angularjs 角度测量中的承诺测试

Angularjs 角度测量中的承诺测试,angularjs,jasmine,karma-runner,Angularjs,Jasmine,Karma Runner,我想在控制器类中测试以下方法: // getIds() { // this.api.getIds() // .then((response)=> { // this.ids = response.data; // this.doSomethingElse(); // }); // } 我不知道如何使用茉莉花和因果报应来处理承诺。该项目是用ES6编写的api.getIds()返回一个$http.get() 在运行expect()之前,如何等待承诺完成?

我想在控制器类中测试以下方法:

//  getIds() {
//  this.api.getIds()
//    .then((response)=> {
//      this.ids = response.data;
//      this.doSomethingElse();
//    });
//  }
我不知道如何使用茉莉花和因果报应来处理承诺。该项目是用ES6编写的
api.getIds()
返回一个$http.get()


在运行expect()之前,如何等待承诺完成?

首先,您应该使用jasmine提供的
done
回调;看

然后,您应该在
api
上模拟
getid
,以便它返回一个具有预期值的已解析承诺。断言应该在
之后进行,然后将
承诺称为-se bell,下面是完整的示例

  beforeEach(function () {
    var $q, vm, api, $controller, $rootScope;

    inject(function (_$controller_, _$rootScope_, _$q_) {
      $q = _$q_;
      $controller = _$controller_;
      $rootScope = _$rootScope_;

      api = jasmine.createSpyObj('api', ['getIds']);
      api.getIds.and.returnValue($q.when([]));

      vm = $controller('MainController', {
        api: api,
        $scope: $rootScope.$new()
      });
    });
  });

  it('should set the ids', function (done) {
    vm
      .getIds()
      .then(function (ids) {
        expect(ids).toBeDefined();
        // add more asserts
        done();
      });
  });
作为旁注,如果
this.doSomethingElse()
也是一个承诺,您必须首先返回它,然后返回它,以便测试最终结果

  beforeEach(function () {
    var $q, vm, api, $controller, $rootScope;

    inject(function (_$controller_, _$rootScope_, _$q_) {
      $q = _$q_;
      $controller = _$controller_;
      $rootScope = _$rootScope_;

      api = jasmine.createSpyObj('api', ['getIds']);
      api.getIds.and.returnValue($q.when([]));

      vm = $controller('MainController', {
        api: api,
        $scope: $rootScope.$new()
      });
    });
  });

  it('should set the ids', function (done) {
    vm
      .getIds()
      .then(function (ids) {
        expect(ids).toBeDefined();
        // add more asserts
        done();
      });
  });