node.js - Express.js、Jest、Supertest:测试运行程序无法找到路由处理程序
问题描述
我正在尝试使用 Jest 和 Supertest 在 Express 服务器上设置测试。这是我的测试和目标代码:
// routes/index.js
var express = require('express');
var router = express.Router();
router.get('/', function(req, res, next) {
res.render('index', { title: 'Express' });
});
// index.test.js
const request = require('supertest');
const express = require('express');
const app = require('express');
const router = require('../index').router;
test('GET /', (done) => {
request(router)
.get('http://localhost:4000')
// .set('Accept', 'application/json')
.expect(200)
.end((err, res) => {
if (err) throw err;
done();
})
});
开玩笑给我以下错误:
expected 200 "OK", got 404 "Not Found"
at Test.Object.<anonymous>.Test._assertStatus (node_modules/supertest/lib/test.js:268:12)
at Test.Object.<anonymous>.Test._assertFunction (node_modules/supertest/lib/test.js:283:11)
at Test.Object.<anonymous>.Test.assert (node_modules/supertest/lib/test.js:173:18)
at Server.localAssert (node_modules/supertest/lib/test.js:131:12)
还尝试过:相对 url ('/')。Error: Can not read property "apply" of undefined
像这样导入在 routes/index.js 中导出的路由器对象:
const router = require('../index').router;
// TypeError: Cannot read property 'address' of undefined
// (while pointing at the .get() method)
我怀疑我引入 Router() 的方式可能不正确,但我的直接尝试没有成功。
有人知道这个问题吗?
解决方案
通过要求 app.js 并将其传递给请求来解决,如下所示:
const app = require("../../app");
test('GET /cold-start', (done) => {
request(app)
.get('/')
.set('Accept', 'application/json')
.expect(200)
.end((err, res) => {
if (err) throw err;
done();
})
});
推荐阅读
- android-bitmap - FileOutputStream 不会从 URI 保存照片
- selenium-chromedriver - chrome 在带有 selenium 的 ubuntu 服务器上失败
- c - 改进 MIPS 汇编语言的以下代码
- css - 使用 CSS 将背景颜色/图像应用于跨度
- javascript - FabricJS从服务器端的路径加载图像?
- ms-access - 导航表单的退出宏。微软访问
- java - 构建相机应用程序,它不能拍照。返回“D/[App Name]: failed to create directory”
- haskell - 更正 Haskell 中快速排序的一段代码“过滤器”的一部分
- python - 如何仅从 Dataframe 中获取匹配元素的第一个元素而不迭代它?
- android - 将外部 NFC 读取器添加到 RCA Voyager