代码之家  ›  专栏  ›  技术社区  ›  Vinod Kolla

摩卡间谍返回callCount 0

  •  0
  • Vinod Kolla  · 技术社区  · 6 年前

    我的控制器如下所示:

    {
       get model() { return schema},
       async findUser(data) {
          const data = await this.model.find({ id: data.id });
          return data;
       }
    }
    

    在我的mocha测试中,我使用Sinon存根返回模型并找到如下函数:

    sinon.stub(controller, 'model').get(() => ({
        find: () => ({ username: 'asdf' })
    }));
    

    我的测试按预期进行。现在我想测试find方法id是否调用过一次,以及传递给它的参数。为此,我添加了以下代码

    const spyFind = sinon.spy(controller.model, 'find');
    assert.isTrue(spyFind.calledOnce);
    

    1 回复  |  直到 6 年前
        1
  •  1
  •   Mark    6 年前

    按照存根的设计方式,每次都会返回一个新对象 controller.model 被称为。结果是:

    controller.model === controller.model // false
    

    find 财产 控制器.型号 使用:

    const spyFind = sinon.spy(controller.model, 'find');
    

    Sinon抓取 控制器.型号 和树桩 找到 那个 对象。下次你打电话的时候 ,例如在测试中,您将从

    我认为更好的方法是提供一个由 find() ,则可以判断是否调用了存根:

    const sinon = require('sinon')
    
    let controller = {
        get model() { return schema},
        async findUser(data) {
            const data = await this.model.find({ id: data.id });
        return data;
        }
    }
    
    let findStub = sinon.stub()
    findStub.returns({ username: 'asdf' })
    
    sinon.stub(controller, 'model').get(() => ({
        find: findStub
    }));
    
    console.log(controller.model.find()) // { username: 'asdf' }
    console.log(findStub.calledOnce);    // true
    
    推荐文章