Jasmine集成Puppeteer测试报错:SyntaxError意外标识符问题
解决Jasmine中使用Puppeteer时的SyntaxError问题
你遇到的SyntaxError: Unexpected identifier是个典型的async/await使用错误——await只能在标记为async的函数内部使用,你的测试代码里多个回调函数都没加async,导致JS引擎无法识别await关键字。除此之外还有几个小细节需要调整,下面是修复后的完整代码和问题解析:
修复后的完整代码
const puppeteer = require('puppeteer'); describe("Jasmine puppeteer", function() { let browser; let page; beforeAll(async () => { browser = await puppeteer.launch({headless: false}); page = await browser.newPage(); await page.goto('chrome://newtab'); await page.screenshot({path: 'a.png'}); }); it("should verify newtab page title", async () => { const pageTitle = await page.title(); expect(pageTitle).toBe(""); }); afterAll(async () => { await browser.close(); }); });
关键修改点解析
给
beforeAll添加async关键字
这是解决你当前报错的核心:puppeteer.launch()、page.goto()这些都是异步方法,需要用await等待它们完成,而await必须包裹在async函数里。没有async前缀的话,JS会把await当成一个未定义的标识符,直接抛出语法错误。调整
it测试用例- 同样给回调函数加上
async,这样才能用await获取页面标题。 - 移除了
done():当测试函数是async类型时,Jasmine会自动等待函数内部的Promise完成,手动调用done()反而会触发测试超时(因为Jasmine会认为你还有未完成的异步操作)。
- 同样给回调函数加上
完善
afterAll钩子
添加async关键字并调用await browser.close(),测试结束后关闭浏览器进程,避免不必要的资源占用。
运行验证
确保你的package.json中test脚本指向Jasmine,比如:
{ "scripts": { "test": "jasmine" } }
然后执行命令:
npm test spec/testspec.js
现在应该能正常启动Puppeteer、执行测试并关闭浏览器了。
内容的提问来源于stack exchange,提问作者Karan Jit Singh
相关产品推荐
相关产品推荐

