gpt4 book ai didi

unit-testing - 使用 Jasmine 测试时,如何触发 $emit 来测试 Controller 中的 $on 监听器?

转载 作者:行者123 更新时间:2023-12-04 11:39:00 27 4
gpt4 key购买 nike

我有一个 Controller ,想用 Jasmine 测试它。我要测试的 Controller 范围内有一个 $on 监听器。如何触发 $emit 事件以运行 $on 监听器?

myApp.controller('superCtrl', function ($scope) {
$scope.hero = 'Rafael ninja turtle';

$scope.$on('change_hero', function (event, new_hero) {
$scope.hero = new_hero;
});
});

当 'change_hero' 事件发生时,测试 $on 监听器是否正常工作:
describe('Super controller', function () {
var $scope,
super_controller;

beforeEach(function(){

module('myApp');

inject(function($rootScope, $controller){
$scope = $rootScope.$new();

super_controller = $controller('superCtrl', {$scope: $scope});

spyOn($scope, '$on');
});

});

it('should change change hero on change_hero event', function (){

var new_hero = 'Ralf ninja turtle',
sub_scope = $scope.$new();

sub_scope.$emit('change_hero', new_hero);

expect($scope.$on).toHaveBeenCalled();
expect($scope.hero).toBe('Ralf ninja turtle');
});

});

最佳答案

看起来您需要在创建 Controller 之前调用 spyOn。
此外,您应该调用 andCallThrough() 否则不会调用真正的方法并且您的测试将失败

关于unit-testing - 使用 Jasmine 测试时,如何触发 $emit 来测试 Controller 中的 $on 监听器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19859829/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com