Mocha beforeEach和afterEach在测试期间

时间:2014-03-31 13:04:11

标签: node.js mocha

我一直在尝试使用mocha测试我的测试服务器。这是我使用的以下代码,几乎与另一个类似帖子中的代码相同。

beforeEach(function(done) {
    // Setup
    console.log('test before function');
    ws.on('open', function() {
        console.log('worked...');
        done();
    });
    ws.on('close', function() {
        console.log('disconnected...');
    });
});

afterEach(function(done) {
    // Cleanup
    if(readyState) {
        console.log('disconnecting...');
        ws.close();
    } else {
        // There will not be a connection unless you have done() in beforeEach, socket.on('connect'...)
        console.log('no connection to break...');
    }
    done();
});

describe('WebSocket test', function() {
    //assert.equal(response.result, null, 'Successful Authentification');
});

问题是,当我执行此草稿时,在命令提示符下看不到预期会看到的console.log。你能告诉我我做错了什么吗?

3 个答案:

答案 0 :(得分:21)

Georgi是正确的,您需要it来指定测试,但如果您不想,则无需在文件中添加顶级describe。您可以使用一堆describe来电替换您的单it

it("first", function () {
    // Whatever test.
});

it("second", function () {
    // Whatever other test.
});

如果您的测试套件很小并且只由一个文件组成,那么这种方法非常有效。

如果您的测试套件较大或分布在多个文件中,我会非常强烈建议您将beforeEachafterEachit放在一起describe,除非您绝对肯定套件中的每项测试都需要beforeEachafterEach完成的工作。 (我用Mocha编写了多个测试套件,我从来没有为每次测试运行beforeEachafterEach。)类似于:

describe('WebSocket test', function() {
    beforeEach(function(done) {
        // ...
    });

    afterEach(function(done) {
       // ...
    });

    it('response should be null', function() {
        assert.equal(response.result, null, 'Successful Authentification');
    });
});

如果您没有将beforeEachafterEach放在describe这样的内容中,那么假设您有一个文件来测试Web套接字,另一个文件来测试一些数据库操作。包含数据库操作测试的文件中的测试 将在其之前和之后执行beforeEachafterEach。如上所示,将beforeEachafterEach置于describe内,可确保仅针对您的网络套接字测试执行这些操作。

答案 1 :(得分:7)

您的示例中没有测试。如果没有要运行的测试,那么在钩子之前和之后都不会被调用。尝试添加如下测试:

describe('WebSocket test', function() {
    it('should run test and invoke hooks', function(done) {
        assert.equal(1,1);
        done(); 
    });
});

答案 2 :(得分:0)

您需要在套件回调(例如it)中包含一个测试回调(例如describe),以执行beforeEach()afterEach()挂钩。更多信息https://mochajs.org/#run-cycle-overview