断言不返回严格的Equal

时间:2016-03-03 21:10:59

标签: javascript node.js tdd

我这样做tutorial

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

我遇到的问题似乎相当微不足道。本教程使用的是一个过时的express版本,并使用它,一个过时的body解析器版本。 为了解决这个问题,我在NPM本地安装了body-parser,并将中间件参数设置为post方法,以使用body-parsers urlencoded方法。

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);
})

test.js

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)

我知道大部分都没用。然而,让我失望的部分是

 AssertionError: '{"status":"ok","message":"Tweet received"}' === '{status:"ok",
 message:"Tweet received"}'

根据body-parser,如果我设置了&#39;扩展&#39;如果选项为true,我可以访问&#34; ..以便将富对象和数组编码为URL编码格式。&#34;。

我的问题是:为什么我的test.js请求不返回严格相等,即使测试http请求的内容类型为&#39; application / x-www-form-urlencoded&#39; ?

1 个答案:

答案 0 :(得分:0)

似乎答案是在严格的断言中围绕我的对象键:

assert.strictEqual(data, '{status:"ok", message:"Tweet received"}' )

assert.strictEqual(data, '{"status":"ok","message":"Tweet received"}' )

注意&#34;状态&#34;和&#34;消息&#34;。