我觉得我误会了什么是摩卡/柴来决定什么是“财产”。我首先运行node index.js
。
index.js
const express = require('express')
module.exports = server
function server (port = 0) {
return new Promise((resolve, reject) => {
const app = express()
app.get('/greet/:name', (req, res) => {
res.send(`Hello ${req.params.name}`)
})
const listener = app.listen(port, err => {
if (err) return reject(err)
resolve({
port: listener.address().port,
stop: () => listener.close()
})
})
})
}
server(3000)
.then(({ port, stop }) => {
console.log('Server listening on port ' + port)
})
.catch(err => {
console.error(err.stack)
process.exit(1)
})
然后我运行npm test
。
/ test / test-pages.js
var expect = require('chai').expect;
var request = require('request');
it('Greet Bob', function(done) {
request('http://localhost:3000/greet/Bob' , function(error, response, body) {
expect(body).to.have.property('name');
done();
});
});
我遇到以下错误:
1) Greet Bob:
Uncaught AssertionError: expected 'Hello Bob' to have property 'name'
at Request._callback (test\test-pages.js:12:30)
at Request.self.callback (node_modules\request\request.js:185:22)
at Request.<anonymous> (node_modules\request\request.js:1161:10)
at IncomingMessage.<anonymous> (node_modules\request\request.js:1083:12)
at endReadableNT (_stream_readable.js:1185:12)
at processTicksAndRejections (internal/process/task_queues.js:81:21)
npm ERR! Test failed. See above for more details.
错误是expected 'Hello Bob' to have property 'name'
,但是在这种情况下Bob
不是属性'name'
吗? Bob
是:name
下方部分中的index.js
属性,不是吗?
app.get('/greet/:name', (req, res) => {
res.send(`Hello ${req.params.name}`)
})
简短回答:
使用
res.json({ name: `Hello ${req.params.name}` });
而不是
res.send(`Hello ${req.params.name}`)
完整的工作示例:
index.js
:
const express = require("express");
function server(port = 0) {
return new Promise((resolve, reject) => {
const app = express();
app.get("/greet/:name", (req, res) => {
res.json({ name: `Hello ${req.params.name}` });
});
const listener = app.listen(port, (err) => {
if (err) return reject(err);
resolve({
port: listener.address().port,
stop: () => listener.close(),
});
});
});
}
if (require.main === module) {
server(3000)
.then(({ port, stop }) => {
console.log("Server listening on port " + port);
})
.catch((err) => {
console.error(err.stack);
process.exit(1);
});
}
module.exports = server;
index.test.js
:
const expect = require("chai").expect;
const request = require("request");
const createServer = require("./");
describe("60032042", () => {
let server;
before(async () => {
server = await createServer(3000);
});
after(() => {
server.stop();
});
it("Greet Bob", function(done) {
request("http://localhost:3000/greet/Bob", function(error, response, body) {
body = JSON.parse(body);
expect(body).to.have.property("name");
done();
});
});
});
集成测试结果和覆盖率报告:
60032042
✓ Greet Bob (38ms)
1 passing (53ms)
---------------|----------|----------|----------|----------|-------------------|
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s |
---------------|----------|----------|----------|----------|-------------------|
All files | 82.76 | 40 | 83.33 | 85.71 | |
index.js | 68.75 | 40 | 71.43 | 73.33 | 22,24,27,28 |
index.test.js | 100 | 100 | 100 | 100 | |
---------------|----------|----------|----------|----------|-------------------|
源代码:https://github.com/mrdulin/mocha-chai-sinon-codelab/tree/master/src/stackoverflow/60032042