首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用sinon间谍恢复或重置的正确方法是什么?

使用sinon间谍恢复或重置的正确方法是什么?
EN

Stack Overflow用户
提问于 2016-08-31 08:17:57
回答 1查看 9.2K关注 0票数 11

我有一套带有摩卡、西农和柴的测试服:

代码语言:javascript
复制
describe('general visor methods tests', () => {

    let res, req, next, resSpy, resNext;

    beforeEach(() => {
        res = {};
        next = () => {};
        resSpy = res.json = sinon.spy();
        resNext = next = sinon.spy();
    });
    afterEach(() => {
        resSpy.restore();
        resNext.reset();
    });


describe('get basemap layers from owner model', () => {
    it('should send the basemap provided by the owner model', () => {
        owner.basemap = ['basemap1', 'basemap2'];
        getBaseMapLayersFromConfig(req, res, next);
        //  console.log(resSpy.args[0][0].data);
        expect(resSpy.calledOnce).to.eql(true);
        expect(resSpy.args[0][0].message).to.eql('basemaps correctly found');
        expect(resSpy.args[0][0].data).to.eql(['basemap1', 'basemap2']);
    });

...

如果我把resSpy.reset()放进去,它就能正常工作。我已经读过,reset()函数是重置间谍的状态。

但是,我不明白的是,如果我放置resSpy.restore(),那么它就会产生下一个错误:

代码语言:javascript
复制
TypeError: resSpy.restore is not a function

我不知道自己做错了什么,也不知道使用restore的正确方法是什么。

另外,我也不知道什么时候应该使用重置或恢复。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-31 08:40:40

只有在使用以下初始化时,spy.restore()才会有用:

代码语言:javascript
复制
let someSpy = sinon.spy(obj, 'someFunction');

这将取代obj.someFunction的间谍。如果您想回到原版,可以使用someSpy.restore()

你用的是一个独立的间谍所以没什么好恢复的。

另外,因为您在beforeEach中为每个测试创建新的间谍,所以不必在afterEach中重置任何内容。只有当您想重用间谍时,这才是有用的:

代码语言:javascript
复制
describe('general visor methods tests', () => {
  let someSpy = sinon.spy(); // create the spy once

  afterEach(() => {
    someSpy.reset(); // reset after each test
  });

  ...
});
票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39244242

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档