[javascript] Sinon 스텁을 쉽게 정리

mocha의 beforeEach 블록과 함께 잘 작동하는 모든 sinon spy mock 및 stub을 쉽게 재설정하는 방법이 있습니까?

샌드 박싱이 옵션이지만 샌드 박스를 어떻게 사용할 수 있는지 모르겠습니다.

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



답변

Sinon은 몇 가지 방법으로 사용할 수있는 Sandboxes를 사용하여이 기능을 제공합니다 .

// 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"
}));


답변

이전 답변은 sandboxes이것을 달성하기 위해 사용 하는 것이 좋지만 설명서 에 따르면 :

sinon@5.0.0부터 sinon 객체는 기본 샌드 박스입니다.

즉, 스텁 / 모의 / 스파이를 정리하는 것이 다음과 같이 쉽습니다.

var sinon = require('sinon');

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

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


답변

@keithjgrant 답변에 대한 업데이트.

버전에서 V2.0.0 이후 상기 sinon.test 있어서 이동 한 별도의 sinon-test모듈 . 이전 테스트를 통과하려면 각 테스트에서이 추가 종속성을 구성해야합니다.

var sinonTest = require('sinon-test');
sinon.test = sinonTest.configureTest(sinon);

또는 샌드 박스를sinon-test 사용 하지 않고 사용합니다 .

var 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"
} 


답변

에 도시 된 바와 같이, 당신은 sinon.collection를 사용할 수있다 sinon 라이브러리의 저자 (2010 년 5 월 월 일자) 블로그 게시물.

sinon.collection API가 변경되었으며이를 사용하는 방법은 다음과 같습니다.

beforeEach(function () {
  fakes = sinon.collection;
});

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

it('should restore all mocks stubs and spies between tests', function() {
  stub = fakes.stub(window, 'someFunction');
}


답변

restore()스텁 된 기능의 동작 만 복원하지만 스텁의 상태는 재설정하지 않습니다. 테스트를 마무리 하고 스텁을 sinon.test사용 this.stub하거나 개별적으로 호출 reset()해야합니다.


답변

sinon이있는 설정을 원하는 경우 항상 모든 테스트에 대해 자체적으로 재설정됩니다.

helper.js에서 :

import sinon from 'sinon'

var sandbox;

beforeEach(function() {
    this.sinon = sandbox = sinon.sandbox.create();
});

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

그런 다음 테스트에서

it("some test", function() {
    this.sinon.stub(obj, 'hi').returns(null)
})


답변

모카 대신 qunit을 사용하는 경우이를 모듈로 감싸 야합니다 (예 :

module("module name"
{
    //For QUnit2 use
    beforeEach: function() {
    //For QUnit1 use
    setup: function () {
      fakes = sinon.collection;
    },

    //For QUnit2 use
    afterEach: function() {
    //For QUnit1 use
    teardown: function () {
      fakes.restore();
    }
});

test("should restore all mocks stubs and spies between tests", function() {
      stub = fakes.stub(window, 'someFunction');
    }
);