我是角度和角度单位测试的新手。我们使用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()
进行单元测试,但这并不起作用。我参加了一个有角度的课程,我们在那里学到了“执行”课程。承诺我们必须使用$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);
}));
我添加了变量测试的设置以查看例如何时执行了then路径,但即使使用$rootScope.$digest
它也永远不会进入then路径,我的变量测试将永远不会从&#更改39; ABC'别的什么。
答案 0 :(得分:1)
我尝试更新您的代码以使用Jasmine 2.0的完成功能。 http://ng-learn.org/2014/08/Testing_Promises_with_Jasmine/
describe('createObj', function () {
it('should return data', function (done) {
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;
})
.finally(done);;
console.log(test);
});