如何为具有子域的 Multi-Tenancy 应用程序编写集成测试。
我正在开发一个 Multi-Tenancy 应用程序。我正在尝试为子域编写集成测试,但似乎无法使其正常工作。
这是我所做的:
测试文件
import supertest from 'supertest';
import http from 'http';
import app from '../../../app';
const baseUrl = 'censio.lvh.me:7000';
describe('Censio tests', () => {
let server;
let request;
beforeAll((done) => {
server = http.createServer(app);
server.listen(7000, done);
request = supertest(server);
});
afterAll((done) => {
server.close(done);
});
describe('Signin', () => {
it('should respond with missing fields ...', async () => {
const response = await request
.post(`${baseUrl}/signin`)
.send({})
.set('Accept', 'application/json');
expect(response.status).toBe(400);
});
});
});
app.js
import '@babel/polyfill';
import bodyParser from 'body-parser';
import cookieParser from 'cookie-parser';
import express from 'express';
import subdomain from 'express-subdomain';
import censioRouter from './tenants/censio';
const app = express();
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
app.use(cookieParser());
// Subdomain definitions
app.use(subdomain('censio', censioRouter));
app.get('*', (req, res) => res.status(200).json({ message: 'Project started' }));
export default app;
当我检查response.text时我看到
<!DOCTYPE html>
<html lang=\"en\">
<head>
<meta charset=\"utf-8\">
<title>Error</title>
</head>
<body>
<pre>Cannot POST /:7000censio.lvh.me/signin</pre>
</body>
</html>
它将帖子放在前面。当我删除端口时,我收到此错误:connect ECONNREFUSED 127.0.0.1:80
我该怎么办?
最佳答案
我终于让它工作了。我将这篇文章发布给将来可能需要此解决方案的人。
首先,我充分了解了如何使用自定义域在本地测试我的应用程序。我必须修改我的
/etc/hosts
文件。 This post帮助了我。我修改了我的测试(如上面的问题所示)。我没有将
app
传递给 supertest,而是传递了我想要的基本 url,即包含我的子域的 url(censio.mydomain.com:myport)。这就是现在的样子。import supertest from 'supertest'; import http from 'http'; import app from '../../../app'; describe('Censio tests', () => { describe('Signin', () => { let server; let request; beforeAll((done) => { server = http.createServer(app); server.listen(7000, done); request = supertest('http://censio.mydomain.com:7000'); }); afterAll((done) => { server.close(done); }); it('should respond with missing fields ...', async () => { const response = await request .post('/signin') .send({}) .set('Accept', 'application/json'); expect(response.status).toBe(400); }); }); });
请注意,我更改了调用前后 Hook 的位置。
我希望这对你有帮助,就像它对我有帮助一样。
关于node.js - 使用 Nodejs 和 Supertest 进行子域集成测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53989762/