【发布时间】:2016-07-05 16:00:31
【问题描述】:
我是 Angular 和 Angular 单元测试的新手。我们将 odata 用于数据库 CRUD 操作,因此我们为此创建了一个服务,如下所示:
function DatabaseService($http, $odataresource, DateFactory, constants) {
var url = constants.BACKEND.URL;
var ObjCreate = $odataresource(url + 'Objects/Function.CreateObject', {}, {}, {});
var service = {
createSomething: {
createObj: createObj
}};
return service;
function createObj(formData) {
var myObj = new ObjCreate();
mapData(formData, myObj );
return myObj.$save();
}
对于我的问题,代码有点抽象,所以请不要怀疑。我现在想对function createObj() 进行单元测试,但这是行不通的。我参加了一个 Angular 课程,我们在那里了解到,对于“执行”承诺,我们必须使用 $rootScope.digest(),但它似乎不适用于我的情况:
describe('createObj', function () {
it('should return data', inject(function ($rootScope) {
var DatabaseService = $injector.get('DatabaseService', { $odataresource: $odataresource });
var formDataMock = {
productName: "Produktname"
};
var test = 'abc';
DatabaseService.createSomething.createObj(formDataMock)
.then(function (data) {
test = data;
})
.catch(function (error) {
test = error;
});
$rootScope.$digest();
console.log(test);
}));
我添加了变量 test 的设置来查看例如 then 路径何时执行,但即使使用 $rootScope.$digest 它也永远不会进入 then 路径,我的变量 test 永远不会从 'abc' 更改为别的东西。
你能告诉我我做错了什么吗?
【问题讨论】:
标签: angularjs unit-testing jasmine promise odata