我一直在尝试使用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。你能告诉我我做错了什么吗?
答案 0 :(得分:21)
Georgi是正确的,您需要it
来指定测试,但如果您不想,则无需在文件中添加顶级describe
。您可以使用一堆describe
来电替换您的单it
:
it("first", function () {
// Whatever test.
});
it("second", function () {
// Whatever other test.
});
如果您的测试套件很小并且只由一个文件组成,那么这种方法非常有效。
如果您的测试套件较大或分布在多个文件中,我会非常强烈建议您将beforeEach
和afterEach
与it
放在一起describe
,除非您绝对肯定套件中的每项测试都需要beforeEach
或afterEach
完成的工作。 (我用Mocha编写了多个测试套件,我从来没有为每次测试运行beforeEach
或afterEach
。)类似于:
describe('WebSocket test', function() {
beforeEach(function(done) {
// ...
});
afterEach(function(done) {
// ...
});
it('response should be null', function() {
assert.equal(response.result, null, 'Successful Authentification');
});
});
如果您没有将beforeEach
和afterEach
放在describe
这样的内容中,那么假设您有一个文件来测试Web套接字,另一个文件来测试一些数据库操作。包含数据库操作测试的文件中的测试 将在其之前和之后执行beforeEach
和afterEach
。如上所示,将beforeEach
和afterEach
置于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