避免使用 localhost 解析 mocha 中的测试
Avoid using localhost to resolve tests in mocha
出于某种原因,当我在 test.js
中设置我的应用时,如下所示:
const app = express();
所有测试都出现 404 错误。
但是,当我这样设置的时候
const app = 'http://localhost:3000'
所有测试都通过。
我知道这不是在测试环境中声明 app
的最佳方式。我怎样才能避免使用像 localhost 这样的修复路径?
示例:
const express = require('express');
const app = express();
// const app = 'http://localhost:3000'
const chai = require("chai");
const expect = chai.expect;
const request = require('supertest');
it('For all bookings', function (done) {
request(app)
.get('/bookings')
.end(function (err, res) {
expect('Content-Type', /json/)
expect(res.statusCode).to.be.equal(200);
done();
});
});
这样我得到 Uncaught AssertionError: expected 404 to equal 200
但是如果我取消注释 const app = 'http://localhost:3000'
以使用它而不是 const app = express();
那么测试通过。
const app = express()
创建没有路由的虚拟 Express 实例。它无法响应对 /bookings
端点的请求,因为没有这样的端点。
http://localhost:3000
有效意味着具有 /bookings
路由的应用程序当前是 运行。
如果向 Supertest request
提供了应用程序实例,则应导入具有 /bookings
路由的应用程序实例:
const app = require('./app');
如果我们在测试文件中这样做
const app = express();
这意味着我们创建了全新的快递应用程序,没有定义路线。正确的方法是使用同一个快速应用程序而不是创建一个新的。
为此,我们可以导出 Express 应用程序并从测试文件中引用它。
// index.js
const express = require('express')
const app = express()
const port = 3000
app.get('/bookings', (req, res) => res.send('Hello World!'))
app.listen(port, () => console.log(`Example app listening on port ${port}!`))
module.exports = app; // export express app
同时用于测试文件
// test.js
...
const app = require("./index"); // import the app
it("For all bookings", function(done) {
request(app)
.get("/bookings")
.end(function(err, res) {
console.log(res);
expect("Content-Type", /json/);
expect(res.statusCode).to.be.equal(200);
done();
});
});
希望对您有所帮助
出于某种原因,当我在 test.js
中设置我的应用时,如下所示:
const app = express();
所有测试都出现 404 错误。
但是,当我这样设置的时候
const app = 'http://localhost:3000'
所有测试都通过。
我知道这不是在测试环境中声明 app
的最佳方式。我怎样才能避免使用像 localhost 这样的修复路径?
示例:
const express = require('express');
const app = express();
// const app = 'http://localhost:3000'
const chai = require("chai");
const expect = chai.expect;
const request = require('supertest');
it('For all bookings', function (done) {
request(app)
.get('/bookings')
.end(function (err, res) {
expect('Content-Type', /json/)
expect(res.statusCode).to.be.equal(200);
done();
});
});
这样我得到 Uncaught AssertionError: expected 404 to equal 200
但是如果我取消注释 const app = 'http://localhost:3000'
以使用它而不是 const app = express();
那么测试通过。
const app = express()
创建没有路由的虚拟 Express 实例。它无法响应对 /bookings
端点的请求,因为没有这样的端点。
http://localhost:3000
有效意味着具有 /bookings
路由的应用程序当前是 运行。
如果向 Supertest request
提供了应用程序实例,则应导入具有 /bookings
路由的应用程序实例:
const app = require('./app');
如果我们在测试文件中这样做
const app = express();
这意味着我们创建了全新的快递应用程序,没有定义路线。正确的方法是使用同一个快速应用程序而不是创建一个新的。
为此,我们可以导出 Express 应用程序并从测试文件中引用它。
// index.js
const express = require('express')
const app = express()
const port = 3000
app.get('/bookings', (req, res) => res.send('Hello World!'))
app.listen(port, () => console.log(`Example app listening on port ${port}!`))
module.exports = app; // export express app
同时用于测试文件
// test.js
...
const app = require("./index"); // import the app
it("For all bookings", function(done) {
request(app)
.get("/bookings")
.end(function(err, res) {
console.log(res);
expect("Content-Type", /json/);
expect(res.statusCode).to.be.equal(200);
done();
});
});
希望对您有所帮助