无法在每次“注入”之前拨打电话。使用业力

时间:2017-09-28 03:15:19

标签: angular karma-runner angular-mock gulp-karma

我在我的项目中使用了FUSE Admin应用程序 - http://fuse-angular-material.withinpixels.com/apps/dashboards/project

我已经检查了其他样本,甚至在不同的项目上运行此代码并且运行正常。这只是因为我无法在每次注入之前注入服务,控制器等,因此我无法接受。我的考试。

在FUSE上运行时,我不知道错误或错过了某些内容(依赖项?不确定)。你有什么想法吗?

这是我的代码。

服务 (该服务返回一个数组列表)

(function () {
    'use strict';

    angular
        .module('app.admin.users', [])
        .config(config)
        .service('adminUserService', service);

    function service(msApi) {
        return {
            adminUserList: function () {
                return msApi.resolve('admin.users.list@query');
            }
        };
    }

    function config(msApiProvider) {
       // calling the API (used dummy data)
        msApiProvider.register('admin.users.list',['app/data/admin/users/users.json']);
    }

})();

UNIT TEST

var oDataService;
var adminUserService;

describe('unit test ----------------------------', function () {
    beforeEach(module('app.admin.users'));

    beforeEach(function () {
        inject(function ($injector) {
            adminUserService = $injector.get('adminUserService');
            oDataService = adminUserService.adminUserList();
        });
    });

    it("is registered with the module.", function () {
        expect(oDataService).not.toBe(null);
    });
});

1 个答案:

答案 0 :(得分:0)

首先,你应该移动它'阻止在每个块之外。 然后从模块获得服务,有两种方法。

  1. 使用注射器(不常见):

    在这里,您需要从模块手动创建注射器。

    it('test my service', function(){
        var $injector = angular.module(['app.admin.users'])
        var service = injector.get('adminUserService')
        expect(service.adminUserList()).not.toBe(null);
    });
    
  2. 使用注入(更常见)

    it('test my service', inject(function(adminUserService){
        expect(adminUserService.adminUserList()).not.toBe(null);
    }));
    
  3. 正如您所见,第二种方法更容易。

    另请参阅:Injecting Services