Ich versuche, eine Komponente mit dem Controller zu testen, mit einigen Bindungen:Angular 1,5 Komponente Unit-Tests mit webpack
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;
In meiner Unit-Test-Datei Ich mag nicht die vollständige Anwendung laden, nur die Dinge, die ich brauche. Also habe ich ein Modul zu verspotten oder einfach nur einen neuen Namen etwas mit Mock erstellen, fügen Sie die Komponente zu diesem Modul und das Modul laden:
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();
});
});
das Modul Erstellen von Mock-Modul ist in Ordnung, aber laden sie versagt , und das Eingeben von Daten in das Nicht-so-viel-geladene Modul schlägt natürlich fehl, ebenso wie das Erstellen eines Controllers, auf dem ich mit dem Testen beginnen kann. Es wäre schön, die Komponenten einzeln testen zu können, getrennt von der Anwendung, in der sie läuft.
einfach den neuen Betreiber für die Klasse mit AppSpecificController nicht seitdem funktioniert die Bindungen Sie von der Komponente erhalten, sind nicht da:
// fails, no bindings available in controller
controller = new AppSpecificController();
Hey Chris, haben Sie dieses Problem gelöst? – Ricardas
Ah ja, ich werde eine Antwort hinzufügen. –