使用笑话来测试没有回调的异步功能

时间:2020-05-19 14:34:15

标签: javascript unit-testing jestjs puppeteer

我目前正在测试异步功能,这是一种刮板,可精确刮擦Ryan Air网站的价格。我想测试一下报废的价格实际上是应该的价格。当试图通过测试来运行它时,我似乎无法使其正常运行……我在Google和其他各种站点上进行了研究,它们似乎都为具有回调,promise等的异步函数提供了解决方案,并且不具有这些功能的异步功能。

我的函数将Ryan Air上给定路线的URL作为参数。

这是我的异步函数(文件名为scraperProduct.js):

const puppeteer = require('puppeteer');

async function scraperProduct(url){
    console.log('Starting scraper...');
    const browser = await puppeteer.launch();
    const page = await browser.newPage();
    await page.goto(url);
    await page.waitFor(500);

    //Price departure
    const [el1] = await page.$x('/html/body/flights-root/div/div/div/div/flights-summary-container/flights-summary/div/div[1]/journey-container/journey/div/div[2]/carousel-container/carousel/div/ul/li[3]/carousel-item/button/div[2]/ry-price/span[2]');
    const txt = await el1.getProperty('textContent');
    const Price = await txt.jsonValue();


    //Price return
    const [el6] = await page.$x('/html/body/flights-root/div/div/div/div/flights-summary-container/flights-summary/div/div[2]/journey-container/journey/div/div[2]/carousel-container/carousel/div/ul/li[3]/carousel-item/button/div[2]/ry-price/span[2]');
    const txt6 = await el6.getProperty('textContent');
    const Price2 = await txt6.jsonValue();

    return Price + Price2;
}

module.exports = scraperProduct;

这是我的测试文件(名为scraperProduct.test.js):

const scraperProduct = require('./scraperProduct');

test("Testing that scraper retrieves correct price from Ryan Air", async () => {
    expect(
        scraperProduct('https://www.ryanair.com/dk/da/trip/flights/select?adults=1&teens=0&children=0&infants=0&dateOut=2020-07-13&dateIn=2020-07-20&originIata=CPH&destinationIata=STN&isConnectedFlight=false&isReturn=true&discount=0')
        ).toBe(698);
});

'toBe(698)'是698,因为这就是测试中的价格。

我非常感谢我能为此提供的任何帮助-这是我第一次使用玩笑,所以我有点傻了。

1 个答案:

答案 0 :(得分:1)

由于您要测试async函数,因此需要等待该函数的结果,即使用await

这是测试异步代码时可能的解决方案之一。等待结果,然后对其进行测试。

const scraperProduct = require('./scraperProduct');

test("Testing that scraper retrieves correct price from Ryan Air", async () => {

    const result = await scraperProduct('https://www.ryanair.com/dk/da/trip/flights/select?adults=1&teens=0&children=0&infants=0&dateOut=2020-07-13&dateIn=2020-07-20&originIata=CPH&destinationIata=STN&isConnectedFlight=false&isReturn=true&discount=0')

    expect(result).toBe(698);
});