用odata承诺的Jasmine单元测试

时间:2016-07-05 07:15:01

标签: angularjs unit-testing jasmine promise odata

我是角度和角度单位测试的新手。我们使用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'别的什么。

你能不能给我一个暗示我做错了什么?

1 个答案:

答案 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);
    });