verwende ich John Papa Winkel Stil mein Controller führen wie folgt aussieht:Wie testen John Papa vm.model Komponententests mit Jasmin?
nach dem Stil John papa style controller style guide:
function testController() {
var vm = this;
vm.model = { name: "controllerAs vm test" };
}
Mein Code Tests wie folgt aussieht:
describe('Controller: testController', function() {
beforeEach(module('myApp'));
var testController;
beforeEach(inject(function ($controller) {
scope = {};
testController = $controller('testController', {
});
}));
it('should have vm.model defined and testController.vm.model is equal to controllerAs vm test', function() {
expect(testController.vm).toBeDefined();
expect(testController.vm.model).toBeDefined();
expect(testController.vm.model.name).toEqual("controllerAs vm test");
});
});
Ergebnis:
-Test fehlgeschlagen: Ergebnismeldung: Erwartet undefiniert definiert. bei Stapel
Also meine Frage ist, wie können wir vm.model und andere Variablen aus diesem testen? controllers
als eine Funktion sieht Ihre Antwort in Ordnung, aber hier ist mein Problem, wenn ich die Controller-Instanz initialisieren durch: testController = $ controller ('testController', { }); dann sollte testController.vm funktionieren, funktioniert aber nicht.Also meine Frage ist an die Jungs, die mit Winker John Papa's Controller als vm-Syntax gearbeitet und mit Jasmin getestet haben. –
@UtpalKumarDas - Unter der Haube ruft '$ controller' gerade' new() 'auf, also funktioniert es genauso. – Josh
@UtpalKumarDas - Ich arbeite seit einigen Jahren mit Angular und habe viele Tests mit Jasmine gemacht. Ich versuche zu erklären, dass das keine Winkelsache ist, sondern ein JavaScript. 'vm' ist keine Eigenschaft auf dem Controller ... es ist eine Variable, die vom Funktionsumfang geschlossen wird. Daher wird es ** niemals ** auf Ihrem Controller vorhanden sein, wenn Sie auf diese Weise verwendet werden. '$ controller' ändert nicht die Funktionsweise von JS. – Josh