Шпионить за кукольниками - PullRequest
1 голос
/ 18 апреля 2020

Я строю веб-скребок, который использует кукловод. Очевидно, что я хотел бы убедиться, что я не нарушу ситуацию, когда работаю над изломами, и поэтому я пишу несколько тестов реализации.

Как бы я go о тестировании кода ниже? Проблема в том, что 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();


            });

        });

1 Ответ

0 голосов
/ 18 апреля 2020

В этом случае 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();
    });
});
...