轻松清理锡农存根

2022-08-30 02:27:24

有没有办法轻松重置所有sinon间谍的嘲笑和存根,这些模拟和存根将与摩卡的beach块干净利落地配合使用。

我看到沙盒是一个选项,但我不明白如何使用沙盒来实现此目的

beforeEach ->
  sinon.stub some, 'method'
  sinon.stub some, 'mother'

afterEach ->
  # I want to avoid these lines
  some.method.restore()
  some.other.restore()

it 'should call a some method and not other', ->
  some.method()
  assert.called some.method

答案 1

Sinon 通过使用沙盒提供此功能,沙盒可以通过以下几种方式使用:

// manually create and restore the sandbox
var sandbox;
beforeEach(function () {
    sandbox = sinon.sandbox.create();
});

afterEach(function () {
    sandbox.restore();
});

it('should restore all mocks stubs and spies between tests', function() {
    sandbox.stub(some, 'method'); // note the use of "sandbox"
}

// wrap your test function in sinon.test()
it("should automatically restore all mocks stubs and spies", sinon.test(function() {
    this.stub(some, 'method'); // note the use of "this"
}));

答案 2

前面的答案建议使用来完成此操作,但根据文档sandboxes

从 sinon@5.0.0 开始,sinon 对象是默认沙箱。

这意味着清理你的存根/模拟/间谍现在就像:

var sinon = require('sinon');

it('should do my bidding', function() {
    sinon.stub(some, 'method');
}

afterEach(function () {
    sinon.restore();
});