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();
});
});