如何测试由事件更改的范围变量?
这是我要测试的一些代码:
$rootScope.$on('someEvent', function(event, option) {
$scope.option = option;
});
我正在尝试
describe("`someEvent`", function() {
var option = 'Title',
beforeEach(inject(function($injector) {
$scope.$emit('someEvent', option);
}));
it("updates option", function() {
expect($scope.option).toBe(option);
});
});
我也试过了$timeout
describe("`someEvent`", function() {
var option = 'Title',
$timeout;
beforeEach(inject(function($injector) {
$timeout = $injector.get('$timeout');
$timeout(function() {
$scope.$emit('someEvent', option);
});
$timeout.flush();
}));
it("updates option", function() {
expect($scope.option).toBe(option);
});
});
和
describe("`someEvent`", function() {
var option = 'Title';
beforeEach(inject(function($injector) {
var $rootScope = $injector.get('$rootScope');
$rootScope.$broadcast('someEvent', option);
}));
it("updates option", function() {
expect($scope.option).toBe(option);
});
});
但他们都失败了,留言Expected undefined to be 'Title'.
我猜是因为它是异步的,我需要一些其他的语法。我正在使用茉莉花。
有什么想法吗?
编辑:更新了更多次尝试
修正:这是因为describe
块声明在错误的区域,其中$scope
尚未设置。与How do I unit test $scope.$emit changing a scope variable in angularjs?几乎相同,所以关闭它。