使用 Puppeteer 的集成测试失败

Integration test failure using Puppeteer

我是 Node.JS 的新手,非常想了解它的更多信息,因此我决定从书中做一些练习。

我最纠结的一点是集成测试。

我想让爬虫检查我的应用程序以查看链接是否正常工作。为此,我使用以下代码:

package.json

{
  "main": "meadowlark.js",
  "scripts": {
    "test": "jest",
    "lint": "eslint meadowlark.js lib"
  },
  "dependencies": {
    "express": "^4.17.1",
    "express3-handlebars": "^0.5.2"
  },
  "devDependencies": {
    "eslint": "^5.15.3",
    "jest": "^24.9.0",
    "portfinder": "^1.0.20",
    "puppeteer": "^1.13.0"
  }
}

integration-tests/basic-navigation.test.js

const portfinder = require('portfinder')
const puppeteer = require('puppeteer')

const app = require('../meadowlark.js')

let server = null
let port = null

beforeEach(async () => {
  port = await portfinder.getPortPromise()
  server = app.listen(port)
})

afterEach(() => {
  server.close()
})

test('home page links to about page', async () => {
  const browser = await puppeteer.launch()
  const page = await browser.newPage()
  await page.goto(`http://localhost:${port}`)
  await Promise.all([
    page.waitForNavigation(),
    page.click('[data-test-id="about"]'),
  ])
  expect(page.url()).toBe(`http://localhost:${port}/about`)
  await browser.close()
})

meadowlark.js

// Starting an express application
var express = require('express');
var app = express();
/* eslint-disable no-undef */
const port = process.env.PORT || 3000
/* eslint-enable no-undef */

// Set up handlebars view engine (Templating)
// Check the views folder for html skeleton and the respective
// handlebars
var handlebars = require('express3-handlebars')
    .create({ defaultLayout:'main' });
app.engine('handlebars', handlebars.engine);
app.set('view engine', 'handlebars');
/* eslint-disable no-undef */
app.set('port', process.env.PORT || 3000);
/* eslint-enable no-undef */
const handlers = require('./lib/handlers')

// Function to generate the quote of the day
//const fortune = require('./lib/fortune')

// Homepage
app.get('/', handlers.home)
// About
app.get('/about', handlers.about);
// 404
app.use(handlers.notFound);
// 500
app.use(handlers.serverError)

// Binding to the port
if(require.main === module) {
    app.listen(port, () => {
        console.log( `Express started on http://localhost:${port}` +
        '; press Ctrl-C to terminate.' )
    })
} else {
    module.exports = app
}

错误

meadowlark/integration-tests/basic-navigation.test.js:9
beforeEach(async () => {
^

ReferenceError: beforeEach is not defined

我在这里遗漏/做错了什么?

您需要 运行 您的测试通过 jest 而不是简单的 node 否则 jest 定义的所有全局变量将不存在。

如果您使用 yarn 的示例:

  • yarn jest 到 运行 它可以根据 jest 默认设置找到的所有测试(参见 documentation 自定义)
  • yarn jest meadowlark/integration-tests/basic-navigation.test.js 仅 运行 您的文件