Javascript 断言不返回严格相等

Javascript 断言不返回严格相等,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('

我正在这样做

到目前为止,本教程展示了如何制作一个简单的web服务器,并使用Node.js为其编写一个简单的测试

我遇到的问题似乎微不足道。本教程使用的是过时版本的express,以及过时版本的body parser。 为了缓解这一问题,我在本地安装了body parser,并将中间件参数设置为post方法,以使用body parser URLCoded方法

Index.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();

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和字符串类型之间的规则