我正在尝试为我的socket.io服务器编写一些基本测试,但是我无法让我的测试一起运行。出于某种原因,我的存根在第一次测试中被调用,但在下面的测试中不会检查不同的存根/间谍。如果更改了测试文件中定义的测试顺序,则无论哪一个都通过。
这是我正在测试的简化模块(server.js):
var expect = require('chai').expect,
sinon = require('sinon'),
mockery = require('mockery');
describe('bidding-war-server', function () {
var biddingWarServer,
stubbedIo;
before(function () {
mockery.enable();
});
beforeEach(function () {
stubbedIo = {
on: function() { }
};
var mockSocketIo = function (port) {
return stubbedIo;
};
mockery.deregisterAll();
mockery.registerAllowable('./server');
mockery.registerMock('socket.io', mockSocketIo);
biddingWarServer = require('./server');
});
after(function () {
mockery.deregisterAll();
mockery.disable();
});
it('should call socket.emit loading', function () {
var stubbedSocket = {
emit: sinon.spy(),
};
stubbedIo.on = sinon.stub().callsArgWith(1, stubbedSocket);
biddingWarServer.startServer();
expect(stubbedSocket.emit.called).to.be.true;
});
it('should setup io.on connection', function () {
stubbedIo.on = sinon.spy();
biddingWarServer.startServer();
expect(stubbedIo.on.called).to.be.true;
});
});
这是我的测试文件:
{{1}}
有人看到我在这里缺少什么吗?
答案 0 :(得分:1)
此问题源于模块缓存 - 您的y
仅加载一次。
为了解决这个问题,我最终分别在server.js
和mockery.enable
块中执行mockery.disable
和beforeEach
,同时强制afterEach
使用干净缓存。
请查看更新的测试文件:
mockery