tutorial - accediendo a $ scope desde el archivo de prueba de la unidad al usar la sintaxis vm "ControllerAs" de AngularJS HotTowel
run unit test angular (2)
Ah, obvio ahora ... Puedo acceder a la variable vm haciendo una referencia al controlador que se creó en la prueba:
it("should assign Dashboard as title", function () {
var vm = controller("dashboard", { $scope: scope });
expect(vm.title).toBe("Dashboard");
});
Vea aquí, por ejemplo: http://www.johnpapa.net/angularjss-controller-as-and-the-vm-variable/
Como sugiere el título, estoy siguiendo este tutorial [ http://tech.pro/tutorial/1473/getting-started-with-angularjs-unit-testing] para configurar las pruebas unitarias y todo está bien EXCEPTO por el hecho Parece que no puedo acceder a la variable vm como mi $ scope .
dashboard.js
var controllerId = ''dashboard'';
angular.module(''app'')
.controller(controllerId, [''common'', ''datacontext'', dashboard]);
function dashboard(common, datacontext) {
var getLogFn = common.logger.getLogFn;
var log = getLogFn(controllerId);
var vm = this;
vm.title = ''Dashboard'';
dashboard.Spec.js
describe("app module", function() {
beforeEach(module("app"));
describe("dashboard", function() {
var scope,
controller;
beforeEach(inject(function($rootScope, $controller) {
scope = $rootScope.$new();
controller = $controller;
}));
it("should assign Dashboard as title", function() {
controller("dashboard", {
$scope: scope
});
expect(scope.title).toBe("Dashboard");
});
});
});
Lo que he intentado: funciona (la prueba pasa) cuando nombro ''$ scope'' directamente en las dependencias de los controladores y le asigno la propiedad "title". Sin embargo, me gustaría mantener el patrón como está.
También he intentado pasar $ scope directamente en dependencias y nombrar el parámetro del controlador como "vm" ...
El mensaje de prueba de falla de Karmas es: Esperado indefinido para ser ''Tablero''
agradecer cualquier ayuda!
también puedes hacer esto:
it("should assign Dashboard as title", function () {
var controller = controller("dashboard as vm", { $scope: scope });
expect(scope.vm.title).toBe("Dashboard");
});