摩卡异步测试,重用相同的请求

时间:2014-06-02 08:18:25

标签: node.js unit-testing mocha

我正在测试HTTP服务器。我希望我可以将done传递给describe(),而不仅仅是it(),这样的话:

var request = require('supertest');

describe('Item', function(done){
    request(app).get('/').end(function(req, res){
        it('should have one thing', function(){
            // Assert on res.body
        });

        it('should have another thing', function(){
            // Assert on res.body
        });

        it('should have more things', function(){
            // Assert on res.body
        });

        done();
    });
});

这不起作用,mocha从不运行测试。

以下代码确实有效,但每次发出新的HTTP请求时,我都希望使用相同的代码。

describe('Item', function(){
    it('should have one thing', function(done){
        request(app).get('/').end(function(req, res){
            // Assert on res.body
            done();
        }
    });

    it('should have another thing', function(done){
        request(app).get('/').end(function(req, res){
            // Assert on res.body
            done();
        }
    });

    it('should more things', function(done){
        request(app).get('/').end(function(req, res){
            // Assert on res.body
            done();
        }
    });
});

如何根据相同的响应运行测试?

1 个答案:

答案 0 :(得分:2)

如果您测试完全相同的请求 - 那么为什么assert分布在多个测试中?恕我直言有两种选择:

  • 要么他们真的属于一起,那么就把所有东西都搬到一个单一的测试中,你的问题就不复存在了。
  • 或者他们不属于一起,然后不是单一的请求,而是个人的,以避免副作用。无论如何,你的问题也将消失。

目前你正在做的方式你可能在测试之间存在相互依赖性,这就是 - 恕我直言 - 非常糟糕的测试风格。

只需2美分。