NodeJs 服务器请求测试

NodeJs Server Request Testing

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

// 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 解析器这样的工具来获取特定的标签?有人可以建议合适的工具吗?

试试 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 请求。