我正在尝试对需要父组件和来自另一个模块的控制器的 AngularJS 1.5(带有 Webpack)组件的(子)控制器进行单元测试。
子控制器结构:
function ChildController () {
var vm = this;
vm.searchText = '';
vm.submit = function() {
var data = {};
data['srch'] = vm.searchText;
vm.parentCtrl.submitTextSearch(data);
};
}
module.exports = ChildController;
子组件:
var template = require('./child.html');
var controller = require('./child.controller');
var childComponent = {
require: {
parentCtrl: '^parent'
},
template: template,
controller: controller,
controllerAs: 'vm'
};
module.exports = childComponent;
所以我想做的是模拟出 childController 的 submit() 函数中所需的 parentCtrl。我一直无法找到如何真正做到这一点。我找到了一些类似的子父指令解决方案并尝试了这些解决方案,例如通过假 HTML 元素注入父控制器,如本子父指令示例中所述,并且基本上相同的stackoverflow 解决方案没有结果。我的问题至少不同之处在于子控制器和父控制器位于不同的模块中。而且我认为范围技巧不是 Angular 1.5 风格的?
没有失败的模拟尝试,我的 Jasmine 测试的骨架:
describe('child component', function() {
describe('child controller', function() {
var controller;
beforeEach(angular.mock.module('child'));
beforeEach(inject(function(_$componentController_) {
controller = _$componentController_('child');
}))
it('should work', function() {
controller.searchText = "test";
controller.submit();
})
})
})
这导致TypeError: Cannot read property 'submitTextSearch' of undefined
. 我应该怎么做才能模拟父控制器?由于我在 Angular 方面的经验有限,我没有想法。