1

我正在构建一个使用 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();


            });

        });
4

1 回答 1

1

在这种情况下,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();
    });
});
于 2020-04-18T12:47:57.150 回答