我目前正在测试异步功能,这是一种刮板,可精确刮擦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,因为这就是测试中的价格。
我非常感谢我能为此提供的任何帮助-这是我第一次使用玩笑,所以我有点傻了。
答案 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);
});