【发布时间】:2020-09-01 20:06:48
【问题描述】:
首先,我有点初学者。我使用 express-generator 创建了一个 Express 项目,其中包含一个文件:bin/www. www 实际上是一个包含服务器创建的 javascript 文件,如下面的代码 sn-p:
#!/usr/bin/env node
// This file is generated by express generator
var app = require('../app');
var debug = require('debug')('happy-meal:server');
var http = require('http');
var port = normalizePort(process.env.PORT || '3000');
app.set('port', port);
var server = http.createServer(app);
server.listen(port);
server.on('error', onError);
server.on('listening', onListening);
function normalizePort(val) {}
function onError(error) {}
function onListening() {}
// Added by myself
exports.module = server;
在开玩笑测试中我添加自己以访问服务器实例的最后一行。
所以,我想使用以下代码运行一个简单的集成测试:
// integration test: users.test.js
const request = require("supertest");
describe("/api/v1/users", () => {
let server;
beforeEach(() => {
server = require("../../bin/www");
});
afterEach(() => {
server.close();
});
describe("GET /", () => {
it("should return all users", async (done) => {
const res = await request(server).get("/api/v1/users");
expect(res.status).toBe(200);
done();
});
});
});
这导致 jest 的以下错误输出:
TypeError: app.address is not a function
14 | describe("GET /", () => {
15 | it("should return all users", async (done) => {
> 16 | const res = await request(server).get("/api/v1/users");
| ^
17 |
18 | expect(res.status).toBe(200);
19 | done();
at Test.serverAddress (node_modules/supertest/lib/test.js:55:18)
at new Test (node_modules/supertest/lib/test.js:36:12)
at Object.get (node_modules/supertest/index.js:25:14)
at Object.<anonymous> (tests/integration/users.test.js:16:47)
● /api/v1/users › GET / › should return all users
TypeError: server.close is not a function
9 | });
10 | afterEach(() => {
> 11 | server.close();
| ^
12 | });
13 |
14 | describe("GET /", () => {
at Object.<anonymous> (tests/integration/users.test.js:11:16)
看起来它无法将“服务器”变量识别为服务器对象。因此,“server.close()”不起作用,因此服务器没有关闭。获取请求也不起作用。再一次,服务器对象不被视为服务器实例。
我做错了什么?我希望你能在这里帮助我。
【问题讨论】:
标签: node.js express jestjs integration-testing