避免使用localhost解析Mocha中的测试

时间:2019-02-21 19:40:48

标签: node.js express mocha chai supertest

出于某种原因,当我像这样在dev中设置我的应用程序时:

test.js

所有测试都出现404错误。

但是,当我这样设置

const app = express();

所有测试通过。

我知道尽管这不是在测试环境中声明const app = 'http://localhost:3000'的最佳方法。如何避免使用本地主机之类的修复路径?

示例:

app

那样我就可以得到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'来使用它,则测试通过。

2 个答案:

答案 0 :(得分:1)

const app = express()创建没有路由的虚拟Express实例。它无法响应对/bookings端点的请求,因为没有这样的端点。

http://localhost:3000有效表示具有/bookings路由的应用程序当前正在运行。

如果将应用程序实例提供给Supertest的request,则应导入具有/bookings路由的应用程序实例:

const app = require('./app');

答案 1 :(得分:1)

如果我们在测试文件中这样做

const app = express();

这意味着我们创建了未定义路线的全新快递应​​用。正确的方法是使用同一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();
    });
});

希望有帮助