最近对 NodeJS 产生了兴趣,我终于设法拿到了一本 NodeJS 的书。书中的一个简单示例是创建一个快速服务器并编写一个测试来验证作为练习的一部分公开的简单 API。
请参考以下代码(我使用的是node v0.8.8)
服务器 (nodeExample.js)
var express = require('express')
var app = express.createServer()
app.listen(8000)
var msgs = []
app.get('/', function(req, res) {
res.send('Welcome to Node Twitter')
})
app.post('/send', express.bodyParser(), function(req, res) {
if (req.body && req.body.tweet) {
msgs.push(req.body.tweet)
res.send({status:"ok", message:"Message received"})
} else {
res.send({status:"nok", message:"Message not received"})
}
})
app.get('/tweets', function(req,res) {
res.send(msgs)
})
考试
var http = require('http'),
assert = require('assert')
var opts = {
host: 'localhost',
port: 8000,
path: '/send',
method: 'POST',
headers: {'content-type':'application/x-www-form-urlencoded'}
}
var req = http.request(opts, function(res) {
res.setEncoding('utf8')
var data = "";
res.on('data', function(d) {
data += d
})
res.on('end', function() {
assert.strictEqual(data, {status:"ok", message:"Message received"})
})
})
req.write('tweet=test')
req.end()
我设法让服务器启动并运行没有问题(除了一个警告,即 express 的 createServer 方法已被弃用,尽管这似乎不是困扰我的问题);但是当我运行测试时,assert 会抛出一个异常,表明测试失败,这显然不应该发生。
这是问题的屏幕截图
如果您仔细观察错误,则似乎是响应部分附加了转义字符“\n”,这似乎是导致问题的原因。
我试图通过
- 尝试不同的相等检查(equal、strictEqual 和 deepEqual)
- 从响应中删除 utf8 编码
但没有运气(除非我当然对字符串化的测试数据执行相等性检查,针对手动删除格式的返回的字符串化响应对象)。
所以问题是,
- 为什么以上述方式格式化响应?仅仅是为了可读性吗?
- 假设我不允许删除格式,我该如何对刚刚收到的响应数据执行断言测试。