Невозможно вызвать beforeEach для "внедрения" в модульном тестировании angularJS (FUSE Admin) с использованием кармы

Я использовал приложение FUSE Admin в своем проекте - http://fuse-angular-material.withinpixels.com/apps/dashboards/project.

Я уже проверил другие примеры и даже запустил этот код в другом проекте и работает просто отлично. Просто я не могу внедрить службу, контроллер и т. Д. В 'beforeEach inject', поэтому я не могу продолжать. мой тест

Я не знаю, что не так, или я что-то упустил (зависимости? Не уверен) при запуске этого на 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);
    });
});

1 ответ

Во-первых, вы должны переместить блок '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);
    }));
    

Как видите, второй подход намного проще.

См. Также: инъекционные услуги

Другие вопросы по тегам