当前位置: 首页 > 知识库问答 >
问题:

如何用$q测试Angular中的服务

羊舌和安
2023-03-14

我有一个简单的服务:

.factory('list', function($q, $timeout) {
    return {
        get: function() {
            var dfd = $q.defer();

            $timeout(function () {
                dfd.resolve(['label1', 'label2']);
            }, 10);

            return dfd.promise;
        }
    };
});

我想测试一下。所以我创造了:

describe('list', function() {

    var list, labels;

    beforeEach(module('app'));
    beforeEach(inject(function($q, _list_) {
       list = _list_;

       spyOn(list, 'get').and.callThrough();

       list.get().then(function(result) {
           labels = result;
       });
    }));

    describe('getting list of labels', function() {

        it('should return list of labels', function() {
            expect(labels).not.toBe(undefined);
            expect(Array.isArray(labels)).toBeTruthy();
        });

     });

});

但是问题是,即使服务中的get方法返回了promise,那么函数中的回调也没有执行。我做错什么了吗?我在Jasmine中读到了call Fake方法,但老实说,我不认为使用它有什么意义。你能解释一下使用它有什么好处吗?顺便说一句,我有茉莉花2.0和最新的角模拟。

共有1个答案

彭宏义
2023-03-14

答案很简单,我忘了。由于我使用了$timeout,我应该在之后调用flush

 类似资料:
  • 问题内容: 我刚刚跳到另一个项目,并且基本上,我被要求编写单元测试。因为我已经了解Protractor的e2e测试,所以我现在切换到Karma和Jasmine进行单元测试。我已经下载了业力,茉莉花,业力茉莉花和业力铬发射器。我也安装了角angular,所以应该准备开始了。我已经在互联网上阅读了很多东西,但是现在,我真正需要的是一个真实应用程序的具体示例,以弄清楚如何开始编写测试。我不需要简单的示例

  • 问题内容: 我们正在构建一个Angular应用程序,并且试图弄清楚如何获得渲染各种页面所需时间的一些基准。我在这里已读过有关内容,但这似乎仅对非单页应用程序有用,因为当我导航至应用程序中的新视图时,计时编号不会改变。 理想情况下,我们将能够插入一些代码来获取各种视图的渲染时间并将其发布到我们的Big Query服务中。 关于如何在Angular应用中获取视图的时间信息的任何想法? 编辑: 更具体地

  • 问题内容: 我已经能够让控制器将$ on侦听器与一起使用。 但我看不到任何有关如何获取服务以监听事件的文档。 我试过了,但是只允许一个听众。我希望多个服务中的侦听器,无论其父控制器是否在作用域内。 问题答案: 经过一番试验后,事实证明,使用最少的代码即可将事件发送到服务。 如果有其他人遇到此问题,请遵循示例服务代码。 该样本在获得相应广播后将服务模型保存并还原到本地存储中

  • 问题内容: 我试图在我的项目中运行默认的服务单元测试(取自GitHub上的Angular Seed项目),但是我一直收到错误消息“模块未定义”。 我已经读到它可能与所引用的JavaScript文件的顺序有关,但是我似乎无法使其正常工作,因此希望你们中的一个能够提供帮助。 我的测试配置如下所示: basePath =’../’; 文件= [ ‘public / javascripts / lib /

  • 问题内容: 我对Java单元测试非常陌生,听说Mockito框架对于测试非常有用。 我已经开发了一个REST Server(CRUD方法),现在我想对其进行测试,但是我不知道如何? 我什至不知道该测试程序应该如何开始。我的服务器应该在本地主机上运行,​​然后在该URL上进行调用(例如,本地主机:8888)? 这是我到目前为止尝试过的方法,但是我很确定这不是正确的方法。 这是方法的代码。 在此测试用

  • 问题内容: 我只想在不引导Angular的情况下测试服务。 我看了一些例子和教程,但是我什么也不会去。 我只有三个文件: myService.js:在这里定义AngularJS服务 test_myService.js:在这里定义服务的Jasmine测试。 specRunner.html:一个具有常规茉莉花配置的HTML文件,在其中导入了前两个其他文件以及茉莉花,Angularjs和angular-