我使用的是Stenciljs和Jest。我很难测试生命周期中触发的事件(componentDidLoad)。
我可以进入生命周期,但无法测试.emit()事件。
我尝试过以下几种方法:
.spec.ts
it('should spyOn componentDidLoad', () => {
const component = new App();
jest.spyOn(component, 'componentDidLoad');
let eventSpy = jest.fn();
component.document.addEventListener('toScroll', eventSpy);
expect(component.componentDidLoad()).toHaveBeenCalled();
});
情况一目了然:
.tsx
@Event() toScroll: EventEmitter<void>;
componentDidLoad() {
this.toScroll.emit();
}
.spec.ts
it('should spyOn componentDidLoad', () => {
const component = new App();
jest.spyOn(component, 'componentDidLoad');
// need a way to test the emit() here.
expect(component.componentDidLoad()).toHaveBeenCalled();
});
出现以下(逻辑)错误:
render component >是否应使用spyOn componentDidLoad
TypeError: Cannot read property 'emit' of undefined
发布于 2019-05-21 08:47:51
由于模板正在实例化您的EventEmitter,因此我建议使用使用newE2EPage
的end-to-end testing
import { newE2EPage } from '@stencil/core/testing';
it('should emit an event on load', async () => {
const page = await newE2EPage();
await page.setContent(`
<my-app></my-app>
`);
const toScroll = await page.spyOnEvent('toScroll');
await page.waitForChanges();
expect(toScroll).toHaveReceivedEvent();
});
https://stackoverflow.com/questions/56168768
复制相似问题