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');
}
);