0

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

我已经检查了其他示例,甚至在不同的项目上运行此代码并且工作得很好。只是我无法在'beforeEach injection'上注入服务,控制器等,因此我无法继续。我的测试。

在 FUSE 上运行它时,我不知道出了什么问题,或者我错过了什么(依赖关系?不确定)。你有什么主意吗?

这是我的代码。

SERVICE (服务返回数组列表)

(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']);
    }

})();

单元测试

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);
    });
});
4

1 回答 1

0

首先,您应该将 'it' 块移到 beforeEach 块之外。然后从模块中获取服务,有两种方法。

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

如您所见,第二种方法要容易得多。

另请参阅:注入服务

于 2017-09-28T04:48:05.120 回答