gpt4 book ai didi

angularjs - 对 AngularJS 指令的事件广播进行单元测试

转载 作者:行者123 更新时间:2023-12-03 06:42:52 25 4
gpt4 key购买 nike

我以前从未测试过我的 angularjs 指令,而且我为当前公司编写的指令是使用事件将指令传达给指令和服务。

所以我写了一个指令,例如搜索指令。

<m-search />

该指令广播“searchbox-valuechanged”事件和 key ,现在我必须为其编写测试。

'use strict';

describe('<m-search>', function() {

beforeEach(module('hey.ui'));
var rootScope;
beforeEach(inject(function($injector) {
rootScope = $injector.get('$rootScope');
spyOn(rootScope, '$broadcast');
}));

it("should broadcast something", function() {
expect(rootScope.$broadcast).toHaveBeenCalledWith('searchbox-valuechanged');
});

});

更新输入发生变化时,

<input class="m-input m-input--no-border" type="search" placeholder="Search"
ng-model="ctrl.searchValue"
ng-model-options="{debounce: 100}"
ng-change="ctrl.onChange({search: ctrl.searchValue})">

它调用指令 Controller 中的方法

vm.onChange = function (searchValue) {
$rootScope.$broadcast('searchbox-valuechanged', {data: searchValue});
};

如何测试广播?

最佳答案

我的做法是这样的...

describe('m-search directive', function() {
var ctrl, // your directive's controller
$rootScope; // a reference to $rootScope

beforeEach(function() {
// bootstrap your module
module('hey.ui');

inject(function($compile, _$rootScope_) {
$rootScope = _$rootScope_;
// see https://docs.angularjs.org/api/ngMock/function/angular.mock.inject#resolving-references-underscore-wrapping-

// create an instance of your directive
var element = $compile('<m-search></m-search')($rootScope.$new());
$rootScope.$digest();

// get your directive's controller
ctrl = element.controller('mSearch');
// see https://docs.angularjs.org/api/ng/function/angular.element#methods

// spy on $broadcast
spyOn($rootScope, '$broadcast').and.callThrough();
});
});

it('broadcasts searchbox-valuechanged on change', function() {
var searchValue = {search: 'search string'};
ctrl.onChange(searchValue);

expect($rootScope.$broadcast).toHaveBeenCalledWith(
'searchbox-valuechanged', {data: searchValue});
});
});

您会注意到这根本不依赖于指令的模板。我不认为模板功能属于单元测试领域;这最好留给使用 Protractor 进行 e2e 测试。单元测试是关于测试组件的 API,以确保它们执行其预期的操作。

关于angularjs - 对 AngularJS 指令的事件广播进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30294659/

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