摩卡/角度单元测试永远不会运行“然后”功能

安索伦森

我正在尝试测试可在摩卡咖啡中返回promise的角度服务,但是在单元测试中调用“ then”会超时。我的服务依赖于带有异步$ resource请求的第二个服务。myService.getData()应该从内部从所述异步服务获取数据,并将承诺传递给控制器​​,该控制器在响应上调用“ then”函数。这在控制器中效果很好,并且在单元测试中绝对失败。

服务代码:

// use: myService.getData.then(...) works beautifully in angular controllers
getData = function(dataId) {
    var dataPromise;

    // get students from the api, if necessary, or from the service if already retrieved
    // dataList is a private property of the service
    if(!dataList) {
        dataPromise = asyncServiceUsedByMyService.asyncMethod({...}).$promise
            .then(
                function(response){


                  dataList = response;

                  doSomeDataManipulation();

                      return dataList;
                },
                function(err) {
                    return err;
                }
            );
    }
    // use the existing studentList if available
    else {
        dataPromise = $q.when(function(){
            return dataList
        });
    }

    return dataPromise;
};

测试代码

describe('Service Test', function() {
    var expect = chai.expect,
        myService,
        asyncServiceUsedByMyService;


    beforeEach(function() {

        var data,
            asyncServiceMock;

        data =[...];

        // mock the async dependency
        asyncServiceMock = {
            asynchMethod: function () {
                var deferred = q.defer();

                deferred.resolve(data);
                return {$promise: deferred.promise};
            }
        };

        module('myApp');

        module(function($provide){
            $provide.value('asyncServiceUsedByMyService', asyncServiceMock);
        });

        inject(function(myService, $q, asyncServiceUsedByMyService) {
            myService = myService;
            q = $q;
            courseEnrollmentService = courseEnrollmentServiceMock;
        });
    });

    // passes
    it('should be available', function() {
        expect(!!myService).to.equal(true);
    });

    // 'then' function is never called, unit test times out
    it('should get all items from async dependency', function(done) {
        myService.getData().then(function(response) {
            expect(response).to.have.property('length').that.equals(5);
            done();
        });
    });

});

我如何获取myService的“ then”功能以在单元测试中运行,因此它将获取模拟的数据(由于我们没有进行实际的api调用,该数据应该几乎是瞬时的?)。

注意:我也尝试了'chai-as-promised'语法,但是以下内容似乎超时了

it('should get all items from async dependency', function(done) {
    expect(myService.getData()).to.eventually.have.property('length').that.equals(5).and.notify(done);
});
费德里科·纳夫里亚(Federico Nafria)

角度承诺的分辨率是在摘要周期中确定的,您可以通过调用scope.$apply();测试来触发此周期

您可以在这里阅读更多内容

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

摩卡/角度单元测试永远不会运行“然后”功能

来自分类Dev

Vertx单元测试永远不会完成

来自分类Dev

单元测试通过Tasks永远运行

来自分类Dev

单元测试通过Tasks永远运行

来自分类Dev

导入摩卡单元测试结果以声纳

来自分类Dev

功能单元测试

来自分类Dev

单元测试功能

来自分类Dev

无法在单元测试中运行远程功能

来自分类Dev

单元测试angularjs $ q.all-承诺永远不会完成

来自分类Dev

AngularJS茉莉花单元测试-永远不会调用Controller方法

来自分类Dev

单元测试角度图

来自分类Dev

角度单元测试组合

来自分类Dev

复制功能的单元测试

来自分类Dev

在摩卡单元测试中如何使用猫鼬?

来自分类Dev

运行QtQuickTest单元测试

来自分类Dev

运行Tensorflow单元测试

来自分类Dev

单元测试未运行

来自分类Dev

单元测试功能返回功能

来自分类Dev

角度运行功能,然后应用

来自分类Dev

灰烬单元测试的计算属性然后

来自分类Dev

Angular指令链接功能永远不会运行

来自分类Dev

运行多个异步单元测试方法会产生错误,但单独运行它们不会

来自分类Dev

进行所有测试后,Python单元测试将运行功能

来自分类Dev

调用服务的角度单元测试

来自分类Dev

单元测试角度+量角器

来自分类Dev

角度单元测试Jasmine Spy错误

来自分类Dev

使用ngModel的单元测试角度指令

来自分类Dev

单元测试角度指令更新ngModel

来自分类Dev

角度单元测试失败,但本地失败