在为我的快速API编写测试时,我想检查response.body
是否有我期望的html。
我发现响应对象有一个body属性,但它是空的。我在response.text
属性中找到了html。
当我使用Postman检查响应时,它使用标题详细信息的单词标题和html数据的主体。这是我的预期。这种差异使我感到困惑,因为我只是在学习http。
我不是在询问我自己的代码,因为我在不同的网站(www.bbc.co.uk)上尝试过,并得到了相同的东西。
为什么措辞有区别?如果没有返回数据,那么response.body
是什么?
以下是我的测试中使用的代码。这是ejs模板;
<html>
<head></head>
<body>Hello again world!</body>
</html>
这是快递应用程序;
const express = require('express');
const app = express();
const port = process.env.PORT || 3000;
app.set('view engine', 'ejs');
app.get('/', function(req, res) {
res.status(200).render('index');
});
app.get('*', function(req, res){
res.status(404).send('what???');
});
app.listen(3000, function() {
console.log('Example app listening on port ' + port);
});
以下是测试;
const chai = require('chai');
const chaiHttp = require('chai-http');
const expect = require('chai').expect;
chai.use(chaiHttp);
const api = 'www.bbc.co.uk';
describe('The phonics API', () => {
it('should return status', (done) => {
chai.request('http://localhost:3000')
.get('/')
.end((err, res) => {
expect(res).to.have.status(200);
expect(res.body).to.exist;
done();
});
});
it('should return an HTML file in the body', (done) => {
chai.request('http://localhost:3000')
.get('/')
.end((err, res) => {
expect(res).to.be.html;
done();
});
});
it('should return status 404 for wrong url', (done) => {
chai.request('http://localhost:3000')
.get('/resersa')
.end((err, res) => {
expect(res).to.have.status(404);
done();
});
});
it('should respond with a body', (done) => {
chai.request(api)
.get('/')
.end((err, res) => {
expect(res.body).to.exist;
console.log(res.body);
done()
});
});
});
在上一次测试中,我添加了console.log(res.body)
以查看其中的内容。它打印{}
。当我将其更改为console.log(res.test)
时,我会得到上面的html。
当我使用邮递员GET http://localhost:3000
时,它在名为body的标签下有html。