我正在构建一个使用puppeteer的网络抓取工具。显然,我想确保在解决问题时不会破坏工作,因此我正在编写一些实现测试。
我将如何测试以下代码?问题是newPage()是嵌套的,我不知道如何为其创建间谍。
有什么想法吗?我是否应该以不同的方式构造代码以使其更容易测试(根据我所读过的内容,这是一个很大的禁忌)。很高兴听到您的建议。
//myFile
myFn(){
let browser = puppeteer.launch()
let page = browser.newPage();
}
describe('searchAddress', () => {
beforeEach(() => {
browserSpy = spyOn(puppeteer,'launch')
pageSpy = spyOn(puppeteer,'newPage') // <--- ????
})
it('should ensure the calls were made', async () => {
await myFn()
expect(sleepSpy).toHaveBeenCalled();
expect(pageSpy).toHaveBeenCalled();
});
});
答案 0 :(得分:0)
在这种情况下,spyOn(puppeteer,'launch')
应该返回一个对象,其中包含用于newPage
调用的间谍对象。我的意思是:
describe('searchAddress', () => {
let newPageSpy;
let browserSpy;
beforeEach(() => {
// ARRANGE
newPageSpy = jasmine.createSpy();
let browserMock = { newPage: newPageSpy };
browserSpy = spyOn(puppeteer, 'launch').and.returnValue(browserMock);
});
it('should ensure the calls were made', async () => {
// ACT
await myFn();
// ASSERT
expect(newPageSpy).toHaveBeenCalled();
});
});