【问题标题】:Jasmine unit tests with odata promises带有 odata 承诺的 Jasmine 单元测试
【发布时间】: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


【解决方案1】:

我尝试更新您的代码以使用 Jasmine 2.0 的 done 功能。 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);
    });

【讨论】:

  • 谢谢,我试试看。
猜你喜欢
  • 1970-01-01
  • 2014-11-16
  • 2014-05-19
  • 2016-10-11
  • 1970-01-01
  • 1970-01-01
  • 2018-06-02
  • 2017-08-02
  • 2013-04-25
相关资源
最近更新 更多