Angular 1.5 компонентное тестирование с помощью веб-пакета

Я пытаюсь протестировать компонент с контроллером, с некоторыми привязками:

class AppSpecificController {
  constructor() {
    this.text = this.initialText ? this.initialText : 'No initial text has been specified.';
  }
}

export const AppSpecificComponent = {
  bindings: {
    'initialText': '<bindInitialText'
  },
  templateUrl: '/app/components/app-specific/app-specific.html',
  controller: AppSpecificController,
  controllerAs: 'appSpecific'
};

export default AppSpecificComponent;

В моем файле модульного теста я не хочу загружать полное приложение, только то, что мне нужно. Итак, я решил смоделировать модуль или просто создать новый с именем mock, добавить компонент в этот модуль и загрузить этот модуль:

import {AppSpecificComponent} from './app-specific.component';

describe('AppSpecificComponent', () => {
    let controller;
    let scope;
    let $componentController;

    beforeEach(() => {
      angular.module('mock-module', [])
        .component('appSpecific', AppSpecificComponent);

      // this fails
      module('mock-module');

      inject((_$componentController_, $rootScope) => {
        scope = $rootScope.$new();
        $componentController = _$componentController_;
      });

      controller = $componentController('appSpecific', {$scope: scope}, {initialText: 'Some text'});
    });

    it('should test something', () => {
      expect(true).toBeTruthy();
    });
});

Создание mock-модуля для модуля - это хорошо, но загрузка его не удалась, и, очевидно, не удалось внедрить что-либо в модуль, загруженный не так много, а также создать контроллер, на котором я могу начать тестирование. Было бы неплохо иметь возможность тестировать компоненты по отдельности, отдельно от приложения, в котором он работает.

Простое использование оператора new для класса AppSpecificController не работает, так как привязки, которые вы получаете от компонента, отсутствуют:

// fails, no bindings available in controller
controller = new AppSpecificController();

1 ответ

Решение

Я нашел ответ где-то еще в Stackru, не уверен, где больше. Ответ, однако, я искал:

angular.mock.module($provide => {
  $provide.controller('SomeController', () => { ... });
  $provide.constant('someConstant', 'some constant');
});
Другие вопросы по тегам