- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
无论我的服务器实际返回什么,如果内容类型是“application/javascript”,Chai 总是会给我 res.body={}
。
这是我的服务器:
const http = require('http');
const server = http.createServer(function (request, response) {
response.writeHead(200, {"Content-Type": "application/javascript"});
response.end('console.log("test");');
});
module.exports = server;
server.listen(process.env.PORT || 8000);
console.log("Server running at http://localhost:8000/");
但是测试没有看到它:
const chai = require('chai');
const chaiHttp = require('chai-http');
const server = require('./test-server');
const should = chai.should();
chai.use(chaiHttp);
describe('GET /test', () => {
it('it should give test result', (done) => {
chai.request(server)
.get('/test')
.end((err, res) => {
console.log(err);
console.log(res);
console.log(res.body); // {}
console.log(res.text); // undefined
res.body.should.be.eql('console.log("test");');
done();
});
});
});
res.body
当内容类型为“application/json”时工作正常。
响应中也没有 console.log("test");
字符串的痕迹:
Response {
domain: null,
_events: {},
_eventsCount: 0,
_maxListeners: undefined,
res:
IncomingMessage {
_readableState:
ReadableState {
objectMode: false,
highWaterMark: 16384,
buffer: [Object],
length: 0,
pipes: null,
pipesCount: 0,
flowing: true,
ended: false,
endEmitted: false,
reading: false,
sync: true,
needReadable: false,
emittedReadable: false,
readableListening: false,
resumeScheduled: true,
defaultEncoding: 'utf8',
ranOut: false,
awaitDrain: 0,
readingMore: true,
decoder: null,
encoding: null },
readable: true,
domain: null,
_events:
{ end: [Object],
data: [Function: bound emit],
close: [Function: bound emit],
error: [Function: bound emit] },
_eventsCount: 4,
_maxListeners: undefined,
socket:
Socket {
connecting: false,
_hadError: false,
_handle: [Object],
_parent: null,
_host: null,
_readableState: [Object],
readable: true,
domain: null,
_events: [Object],
_eventsCount: 9,
_maxListeners: undefined,
_writableState: [Object],
writable: true,
allowHalfOpen: false,
destroyed: false,
_bytesDispatched: 130,
_sockname: null,
_pendingData: null,
_pendingEncoding: '',
server: null,
_server: null,
parser: [Object],
_httpMessage: [Object],
read: [Function],
_consuming: true },
connection:
Socket {
connecting: false,
_hadError: false,
_handle: [Object],
_parent: null,
_host: null,
_readableState: [Object],
readable: true,
domain: null,
_events: [Object],
_eventsCount: 9,
_maxListeners: undefined,
_writableState: [Object],
writable: true,
allowHalfOpen: false,
destroyed: false,
_bytesDispatched: 130,
_sockname: null,
_pendingData: null,
_pendingEncoding: '',
server: null,
_server: null,
parser: [Object],
_httpMessage: [Object],
read: [Function],
_consuming: true },
httpVersionMajor: 1,
httpVersionMinor: 1,
httpVersion: '1.1',
complete: false,
headers:
{ 'content-type': 'application/javascript',
date: 'Mon, 10 Apr 2017 13:02:37 GMT',
connection: 'close',
'transfer-encoding': 'chunked' },
rawHeaders:
[ 'Content-Type',
'application/javascript',
'Date',
'Mon, 10 Apr 2017 13:02:37 GMT',
'Connection',
'close',
'Transfer-Encoding',
'chunked' ],
trailers: {},
rawTrailers: [],
upgrade: false,
url: '',
method: null,
statusCode: 200,
statusMessage: 'OK',
client:
Socket {
connecting: false,
_hadError: false,
_handle: [Object],
_parent: null,
_host: null,
_readableState: [Object],
readable: true,
domain: null,
_events: [Object],
_eventsCount: 9,
_maxListeners: undefined,
_writableState: [Object],
writable: true,
allowHalfOpen: false,
destroyed: false,
_bytesDispatched: 130,
_sockname: null,
_pendingData: null,
_pendingEncoding: '',
server: null,
_server: null,
parser: [Object],
_httpMessage: [Object],
read: [Function],
_consuming: true },
_consuming: false,
_dumped: false,
req:
ClientRequest {
domain: null,
_events: [Object],
_eventsCount: 4,
_maxListeners: undefined,
output: [],
outputEncodings: [],
outputCallbacks: [],
outputSize: 0,
writable: true,
_last: true,
upgrading: false,
chunkedEncoding: false,
shouldKeepAlive: false,
useChunkedEncodingByDefault: false,
sendDate: false,
_removedHeader: {},
_contentLength: 0,
_hasBody: true,
_trailer: '',
finished: true,
_headerSent: true,
socket: [Object],
connection: [Object],
_header: 'GET /test HTTP/1.1\r\nHost: 127.0.0.1:8000\r\nAccept-Encoding: gzip, deflate\r\nUser-Agent: node-superagent/2.3.0\r\nConnection: close\r\n\r\n',
_headers: [Object],
_headerNames: [Object],
_onPendingData: null,
agent: [Object],
socketPath: undefined,
timeout: undefined,
method: 'GET',
path: '/test',
_ended: false,
res: [Circular],
aborted: undefined,
timeoutCb: null,
upgradeOrConnect: false,
parser: [Object],
maxHeadersCount: null } },
request:
Test {
domain: null,
_events: { end: [Function: bound _clearTimeout] },
_eventsCount: 1,
_maxListeners: undefined,
_agent: false,
_formData: null,
method: 'get',
url: 'http://127.0.0.1:8000/test',
_header: { 'user-agent': 'node-superagent/2.3.0' },
header: { 'User-Agent': 'node-superagent/2.3.0' },
writable: true,
_redirects: 0,
_maxRedirects: 5,
cookies: '',
qs: {},
qsRaw: [],
_redirectList: [],
_streamRequest: false,
app:
Server {
domain: null,
_events: [Object],
_eventsCount: 2,
_maxListeners: undefined,
_connections: 0,
_handle: [Object],
_usingSlaves: false,
_slaves: [],
_unref: false,
allowHalfOpen: true,
pauseOnConnect: false,
httpAllowHalfOpen: false,
timeout: 120000,
_pendingResponseData: 0,
maxHeadersCount: null,
_connectionKey: '6::::8000' },
req:
ClientRequest {
domain: null,
_events: [Object],
_eventsCount: 4,
_maxListeners: undefined,
output: [],
outputEncodings: [],
outputCallbacks: [],
outputSize: 0,
writable: true,
_last: true,
upgrading: false,
chunkedEncoding: false,
shouldKeepAlive: false,
useChunkedEncodingByDefault: false,
sendDate: false,
_removedHeader: {},
_contentLength: 0,
_hasBody: true,
_trailer: '',
finished: true,
_headerSent: true,
socket: [Object],
connection: [Object],
_header: 'GET /test HTTP/1.1\r\nHost: 127.0.0.1:8000\r\nAccept-Encoding: gzip, deflate\r\nUser-Agent: node-superagent/2.3.0\r\nConnection: close\r\n\r\n',
_headers: [Object],
_headerNames: [Object],
_onPendingData: null,
agent: [Object],
socketPath: undefined,
timeout: undefined,
method: 'GET',
path: '/test',
_ended: false,
res: [Object],
aborted: undefined,
timeoutCb: null,
upgradeOrConnect: false,
parser: [Object],
maxHeadersCount: null },
protocol: 'http:',
host: '127.0.0.1:8000',
_callback: [Function],
res:
IncomingMessage {
_readableState: [Object],
readable: true,
domain: null,
_events: [Object],
_eventsCount: 4,
_maxListeners: undefined,
socket: [Object],
connection: [Object],
httpVersionMajor: 1,
httpVersionMinor: 1,
httpVersion: '1.1',
complete: false,
headers: [Object],
rawHeaders: [Object],
trailers: {},
rawTrailers: [],
upgrade: false,
url: '',
method: null,
statusCode: 200,
statusMessage: 'OK',
client: [Object],
_consuming: false,
_dumped: false,
req: [Object] },
response: [Circular],
_timeout: 0,
called: true },
req:
ClientRequest {
domain: null,
_events:
{ drain: [Function],
error: [Function],
response: [Function],
prefinish: [Function: requestOnPrefinish] },
_eventsCount: 4,
_maxListeners: undefined,
output: [],
outputEncodings: [],
outputCallbacks: [],
outputSize: 0,
writable: true,
_last: true,
upgrading: false,
chunkedEncoding: false,
shouldKeepAlive: false,
useChunkedEncodingByDefault: false,
sendDate: false,
_removedHeader: {},
_contentLength: 0,
_hasBody: true,
_trailer: '',
finished: true,
_headerSent: true,
socket:
Socket {
connecting: false,
_hadError: false,
_handle: [Object],
_parent: null,
_host: null,
_readableState: [Object],
readable: true,
domain: null,
_events: [Object],
_eventsCount: 9,
_maxListeners: undefined,
_writableState: [Object],
writable: true,
allowHalfOpen: false,
destroyed: false,
_bytesDispatched: 130,
_sockname: null,
_pendingData: null,
_pendingEncoding: '',
server: null,
_server: null,
parser: [Object],
_httpMessage: [Circular],
read: [Function],
_consuming: true },
connection:
Socket {
connecting: false,
_hadError: false,
_handle: [Object],
_parent: null,
_host: null,
_readableState: [Object],
readable: true,
domain: null,
_events: [Object],
_eventsCount: 9,
_maxListeners: undefined,
_writableState: [Object],
writable: true,
allowHalfOpen: false,
destroyed: false,
_bytesDispatched: 130,
_sockname: null,
_pendingData: null,
_pendingEncoding: '',
server: null,
_server: null,
parser: [Object],
_httpMessage: [Circular],
read: [Function],
_consuming: true },
_header: 'GET /test HTTP/1.1\r\nHost: 127.0.0.1:8000\r\nAccept-Encoding: gzip, deflate\r\nUser-Agent: node-superagent/2.3.0\r\nConnection: close\r\n\r\n',
_headers:
{ host: '127.0.0.1:8000',
'accept-encoding': 'gzip, deflate',
'user-agent': 'node-superagent/2.3.0' },
_headerNames:
{ host: 'Host',
'accept-encoding': 'Accept-Encoding',
'user-agent': 'User-Agent' },
_onPendingData: null,
agent:
Agent {
domain: null,
_events: [Object],
_eventsCount: 1,
_maxListeners: undefined,
defaultPort: 80,
protocol: 'http:',
options: [Object],
requests: {},
sockets: [Object],
freeSockets: {},
keepAliveMsecs: 1000,
keepAlive: false,
maxSockets: Infinity,
maxFreeSockets: 256 },
socketPath: undefined,
timeout: undefined,
method: 'GET',
path: '/test',
_ended: false,
res:
IncomingMessage {
_readableState: [Object],
readable: true,
domain: null,
_events: [Object],
_eventsCount: 4,
_maxListeners: undefined,
socket: [Object],
connection: [Object],
httpVersionMajor: 1,
httpVersionMinor: 1,
httpVersion: '1.1',
complete: false,
headers: [Object],
rawHeaders: [Object],
trailers: {},
rawTrailers: [],
upgrade: false,
url: '',
method: null,
statusCode: 200,
statusMessage: 'OK',
client: [Object],
_consuming: false,
_dumped: false,
req: [Circular] },
aborted: undefined,
timeoutCb: null,
upgradeOrConnect: false,
parser:
HTTPParser {
'0': [Function: parserOnHeaders],
'1': [Function: parserOnHeadersComplete],
'2': [Function: parserOnBody],
'3': [Function: parserOnMessageComplete],
'4': null,
_headers: [],
_url: '',
_consumed: false,
socket: [Object],
incoming: [Object],
outgoing: [Circular],
maxHeaderPairs: 2000,
onIncoming: [Function: parserOnIncomingClient] },
maxHeadersCount: null },
links: {},
text: undefined,
body: {},
files: undefined,
buffered: false,
headers:
{ 'content-type': 'application/javascript',
date: 'Mon, 10 Apr 2017 13:02:37 GMT',
connection: 'close',
'transfer-encoding': 'chunked' },
header:
{ 'content-type': 'application/javascript',
date: 'Mon, 10 Apr 2017 13:02:37 GMT',
connection: 'close',
'transfer-encoding': 'chunked' },
statusCode: 200,
status: 200,
statusType: 2,
info: false,
ok: true,
redirect: false,
clientError: false,
serverError: false,
error: false,
accepted: false,
noContent: false,
badRequest: false,
unauthorized: false,
notAcceptable: false,
forbidden: false,
notFound: false,
type: 'application/javascript',
setEncoding: [Function: bound ],
redirects: [] }
当内容类型为“application/json”时,如何断言响应?
最佳答案
2019 年 5 月 21 日更新
您必须在测试中添加 .buffer(true)
才能让 chai 理解。
const chai = require('chai');
const chaiHttp = require('chai-http');
const server = require('./server');
const should = chai.should();
chai.use(chaiHttp);
describe('GET /test', () => {
it('it should give test result', (done) => {
chai.request(server)
.get('/test')
.buffer(true)
.end((err, res) => {
console.log(err);
// console.log(res);
console.log(res.application);
console.log(res.body); // {}
console.log(res.text); // undefined
res.text.should.be.eql('console.log("test");');
done();
});
});
});
然后,req.text
将具有内容 console.log("test")
。
如果您在 req.text
而不是 req.body
上断言,它将起作用。
查看 github 问题: https://github.com/chaijs/chai-http/issues/249
感谢@Dante 注意到已弃用的内容类型。
原帖
首先设置'text/javascript'
而不是'application/javascript'
。
然后,req.text
将具有内容 console.log("test")
。
如果您在 req.text
而不是 req.body
上断言,它将起作用。
关于javascript - Chai 无法识别内容类型 "application/javascript",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43324004/
我正在寻找匹配以下内容的最佳方法: expect([ { C1: 'xxx', C0: 'this causes it not to match.' }
我该如何做 or使用 chai.should 进行测试? 例如就像是 total.should.equal(4).or.equal(5) 或者 total.should.equal.any(4,5)
我正在使用带有 chai 断言库的 webdriverio 进行 UI 测试,同时断言一个字符串我想知道我是否可以让 chai 在断言通过或失败时根据步骤返回 true/false。 var text
我正在使用 Nightwatch JS v0.9.16运行 Selenium /chai在我的本地主机上测试。所有断言都适用于 nightwatch,但我无法让 chai 断言在记者中显示。 此问题已
我正在尝试在 typescript 中使用 chai,但我无法让任何断言按预期工作。 包.json "dependencies": { "@types/chai": "^4.0.1", "@t
我一直在尝试创建自己的自定义 chai 断言(基于 Cypress 配方模板:https://github.com/cypress-io/cypress-example-recipes/blob/ma
我最近从 should.js 切换到 chai.js,因为我发现前者在基于浏览器的测试中造成障碍。由于支持语法,因此更改不需要对我的测试套件进行任何更改,但我看到失败测试的输出不再以有用的方式向我显示
我即将让我们的测试与 Karma 一起运行,但我错过了最后一步(我认为),得到 chai-jquery为了表现,我尝试了两个不同的插件 https://www.npmjs.com/package/ka
使用 Protractor 时,chai 和 mocha 框架中 promise 的 chai 有什么区别? 最佳答案 Chai - 测试断言库,允许您使用 expect、should 等关键字测试代
我想编写一个 NodeJS chai 测试,它检查某些服务调用的结果(这是一个数组)是否包含一个与我期望的对象相同的对象。结果中可能还有一些我不想检查的字段。 有两个 chai 插件可以解决这个问题:
在我的 Chai 测试中,我经常发现自己想要使用他们的断言,例如 .to.be.empty、.to.be.true 等,因为我发现它们比 .to.be.length(1) 或 .to.be.equal
在我的 Chai 测试中,我经常发现自己想要使用他们的断言,例如 .to.be.empty、.to.be.true 等,因为我发现它们比 .to.be.length(1) 或 .to.be.equal
下面的调用 filestore.getBlockNumber.q(fileHash).should.eventually.bignumber.equal(blockNumber) 失败 Asserti
制作我的第一个 Express 应用程序时,我正在尝试为 api 端点编写测试,并使用数据结构作为数据库的占位符,但即使测试“通过”,控制台中仍会出现错误,如图所示' import chai fr
我有以下功能要测试: // ... const local = new WeakMap(); export default class User { // ... async password
我正在尝试为我的API生成 Istanbul 尔代码覆盖率。我已经研究了SO中的许多答案以及 Istanbul 尔的文档,但没有任何对我有用。 Mocha 测试运行良好,一切都通过了,甚至 Istan
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 6 年前。 Improve this ques
我有一个字符串数组['abc,'def','ghi','jkl'] 我的字符串 B 等于 'j'。 我想用 chai 检查数组中的任何元素是否有字符串 B 作为子字符串 这可能吗?我似乎无法弄清楚如何
使用Chai,如何查看元素For example, a div with the class .avatar存在? 我试过 to.exist但它不起作用。 最佳答案 exist vanilla Cha
是否可以使用 chai 断言数组包含多个特定项? 例如,我希望这可以工作: ['foo', 'bar'].should.include(['foo', 'bar']) 相反 chai 抛出:“预期 [
我是一名优秀的程序员,十分优秀!