Sinon存根在第一次测试后没有“调用”

时间:2015-09-07 21:15:06

标签: node.js unit-testing socket.io mocha sinon

我正在尝试为我的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}}

有人看到我在这里缺少什么吗?

1 个答案:

答案 0 :(得分:1)

此问题源于模块缓存 - 您的y仅加载一次。

为了解决这个问题,我最终分别在server.jsmockery.enable块中执行mockery.disablebeforeEach,同时强制afterEach使用干净缓存。

请查看更新的测试文件:

mockery