С мокко и Жасмин, я пытаюсь модульного тестирования этой услуги:
angular.module("main.loadbalancer").run(function($rootScope, $state, DeviceVal) {
$rootScope.$on("$stateChangeStart", function(event, toState) {
var checkUrlDirectEdit, device;
device = window.location.hash.split("/")[2];
checkUrlDirectEdit = function() {
return DeviceVal.previousDevice !== device && toState.name !== "main" && DeviceVal.lb.id === "undefined";
};
if (typeof DeviceVal.lb.id === "undefined" && toState.name !== "main" || checkUrlDirectEdit()) {
event.preventDefault();
DeviceVal.previousDevice = device;
$state.transitionTo("main", {}, {
location: false
});
}
if (DeviceVal.readonly && toState.name !== "main.loadbalancer.readonly") {
event.preventDefault();
$state.transitionTo("main.loadbalancer.readonly", {
id: DeviceVal.lb.id
}, {
location: true,
reload: true
});
}
return window.addEventListener("hashchange", function() {
return location.reload();
});
});
});
С помощью этого теста:
describe("health check service", function() {
var HealthCheckSvc;
HealthCheckSvc = null;
beforeEach(function() {
return module("main.loadbalancer");
});
beforeEach(inject(function($rootScope, _$state_, _DeviceVal_) {
this.$rootScope = $rootScope;
$state = _$state_;
$DeviceVal = _DeviceVal_;
spyOn($state, "transitionTo")
spyOn(this.$rootScope, "$on")
}));
it("do some junk", function() {
toState = 'main.loadbalancer.nodes';
this.$rootScope.$broadcast("$stateChangeStart", "event", "toState");
expect(this.$rootScope.$on).toHaveBeenCalledWith("$stateChangeStart");
});
});
Прямо сейчас, у меня есть трудное время, делая ожидание для $rootScope.$on("$stateChangeStart")
. Я думал spyOn(this.$rootScope, "$on")
и expect(this.$rootScope.$on).toHaveBeenCalledWith("$stateChangeStart");
бы это сделать, но я получаю:
Expected spy $on to have been called with [ '$stateChangeStart' ] but it was never called.
Error: Expected spy $on to have been called with [ '$stateChangeStart' ] but it was never called.
Итак, я просто игнорирую '$ rootScope. $ On' и проверяю обработчик? Не следует ли проверять '$ rootScope. $ On' запускается с' spyOn' и 'expect'? – dman
@ dman: Я не знаю, в чем ваш тестовый пример. Но с трансляцией вы должны проверить свой обработчик. '$ rootScope. $ on'' '' не срабатывает, поскольку он используется только для регистрации обработчика событий. –
при тестировании этого обработчика, я проверяю инструкции if или только то, что результат будет с 'expect ($ state.transitionTo) ...'? – dman