NodeJs服务器请求测试

时间:2015-08-14 09:23:25

标签: javascript node.js testing mocha

为了测试我的NodeJs服务器,我使用 mocha supertest 。 但我不喜欢我的测试的简单性,他们实际上没有正确检查服务器。

// simple test
describe('Server GET requests', function() {
    it('GET /index', function(done){
        request(app)
            .get('/')
            .expect(200, done)
    })
})

因此测试只检查服务器是否有对请求的响应,但是没有检查响应的正确性。我希望测试看起来像这样:

// test should be
describe('Server GET requests', function() {
    it('GET /index', function(done){
        request(app)
            .get('/')
            .expect(200)
            .end(function (err, res) {
                if (err != null)
                    done(err);
                checkContentTitle('Home Page', res.text);
                checkContent(params, res.text);
                done();
            })
    })
})

// function to check the title of the send result
function checkContentTitle(title, htmlText){
    // checkTitle(title, parse('title', htmlText));
}

但我找不到这样做的正确方法。

测试服务器响应,GET请求响应的好习惯是什么? 我想我需要一些像html \ DOM解析器这样的工具来获取特定的标签?有人可以建议适当的工具吗?

1 个答案:

答案 0 :(得分:1)

尝试cheerio库:

cheerio

它就像jquery一样选择DOM元素,非常容易使用。

您可以将cheerio返回值与您想要的断言进行比较。

test / test.js的例子:

var assert = require("assert");
var cheerio = require('cheerio');
var request = require('request');


describe('domtesting', function() {
  describe('GET /', function () {
    it('title must be Hello', function (done) {

        request('http://example.com/',function(err,response,html){

            if(!err){
                var $ = cheerio.load(html);
                assert.equal('Hello', $('title').text());
                done();
            }
            else{
                console.log(err);
            }
        })
    });
  });
});

使用命名函数或mocha promise语法,以获得更易读和可维护的代码。我还使用request库在测试中启动http请求。