我有以下angularjs
基于组件的工作正常,但查看测试覆盖率之后的任何内容window.addEventListener('message',
都没有被覆盖。
我应该模拟window
对象并提供我自己的实现addEventListener
吗?或监视它并检查它是否被调用?
my.component.controller.ts
export class MyComponentController {
constructor() {}
public theEventOccurred(e: any) {
let json = JSON.parse(e.data);
console.log(json.document);
}
public $onInit() {
window.addEventListener('message', (event) => {
this.theEventOccurred(event);
}, false);
}
}
my.component.spec.ts
describe('Component: my', () => {
let $componentController: angular.IComponentControllerService;
let scope: angular.IScope;
beforeEach(inject(
($rootScope: angular.IScope,
_$componentController_: angular.IComponentControllerService) => {
scope = $rootScope.$new();
$componentController = _$componentController_;
}));
describe('Controller: MyComponentController', () => {
it('should log json.document', () => {
let ctrl: any = $componentController('my', { $scope: scope });
ctrl.$onInit();
});
});
});
我认为直接访问window
或document
从组件代码访问对象不是一个好的模式。
正如我所见,更好的方法是放入window
一个单独的服务,然后只使用依赖注入将服务放入组件中。
例如检查这个。
然后你可以窥探服务的方法,或者只是在你的测试中注入一个模拟服务。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句