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