Javascript 断言不返回严格相等
我正在这样做 到目前为止,本教程展示了如何制作一个简单的web服务器,并使用Node.js为其编写一个简单的测试 我遇到的问题似乎微不足道。本教程使用的是过时版本的express,以及过时版本的body parser。 为了缓解这一问题,我在本地安装了body parser,并将中间件参数设置为post方法,以使用body parser URLCoded方法 Index.jsJavascript 断言不返回严格相等,javascript,node.js,tdd,Javascript,Node.js,Tdd,我正在这样做 到目前为止,本教程展示了如何制作一个简单的web服务器,并使用Node.js为其编写一个简单的测试 我遇到的问题似乎微不足道。本教程使用的是过时版本的express,以及过时版本的body parser。 为了缓解这一问题,我在本地安装了body parser,并将中间件参数设置为post方法,以使用body parser URLCoded方法 Index.js var express = require('express'); var bodyParser = require('
var express = require('express');
var bodyParser = require('body-parser');
var app = express(),
tweets = [];
app.listen(8000)
var urlencodedParser = bodyParser.urlencoded({extended: true})
app.get('/', function(req, res) {
res.send('Welcome to Node Twitter');
});
app.post('/send', urlencodedParser function(req, res) {
if(req.body && req.body.tweet) {
tweets.push(req.body.tweet);
res.send({status:"ok", message:"Tweet received"});
} else {
//no tweet?
res.send({status:"nok", message:"No tweet received"});
}
})
app.get('/tweets', function(req, res) {
res.send(tweets);
})
var http = require('http'),
assert = require('assert'),
bodyParser;
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:"Tweet received"}' )
})
})
req.write('tweet=test');
req.end();
及
test.js
var express = require('express');
var bodyParser = require('body-parser');
var app = express(),
tweets = [];
app.listen(8000)
var urlencodedParser = bodyParser.urlencoded({extended: true})
app.get('/', function(req, res) {
res.send('Welcome to Node Twitter');
});
app.post('/send', urlencodedParser function(req, res) {
if(req.body && req.body.tweet) {
tweets.push(req.body.tweet);
res.send({status:"ok", message:"Tweet received"});
} else {
//no tweet?
res.send({status:"nok", message:"No tweet received"});
}
})
app.get('/tweets', function(req, res) {
res.send(tweets);
})
var http = require('http'),
assert = require('assert'),
bodyParser;
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:"Tweet received"}' )
})
})
req.write('tweet=test');
req.end();
但是,当我运行测试时,我得到:
assert.js:89
throw new assert.AssertionError({
^
AssertionError: '{"status":"ok","message":"Tweet received"}' === '{status:"ok",
message:"Tweet received"}'
at IncomingMessage.<anonymous> (C:\workspace\node-demo\test.js:22:16)
at emitNone (events.js:72:20)
at IncomingMessage.emit (events.js:166:7)
at endReadableNT (_stream_readable.js:905:12)
at nextTickCallbackWith2Args (node.js:437:9)
at process._tickCallback (node.js:351:17)
根据,如果我将“extended”选项设置为true,我将获得访问权限“.对于要编码为URL编码格式的富对象和数组..”
我的问题是:为什么我的test.js请求没有返回严格相等的值,即使test-http请求的内容类型为“application/x-www-form-urlencoded”?答案似乎是将我的对象键包围在严格的断言中:
assert.strictEqual(data, '{status:"ok", message:"Tweet received"}' )
到
请注意“status”和“message”周围的引号。供您参考:这是正确的,因为JSON需要在对象键周围加引号。@MikeC感谢您的建议!我脑子里一定是混淆了json和字符串类型之间的规则