Unit testing 用Mocha Chai和Sinon测试脱胶Vue方法

Unit testing 用Mocha Chai和Sinon测试脱胶Vue方法,unit-testing,vue.js,mocha.js,sinon,debounce,Unit Testing,Vue.js,Mocha.js,Sinon,Debounce,如果我有一个Vue组件,如: import lodash from 'lodash'; export default { //...data, props etc methods: { someFunction: lodash.debounce(function debouncedsomeFunction() { return 'test'; }, 200) } }; 我将如何使用Mocha+Chai+Sinon测试someFunction?有几

如果我有一个Vue组件,如:

import lodash from 'lodash';

export default {

  //...data, props etc

  methods: {
    someFunction: lodash.debounce(function debouncedsomeFunction() {
      return 'test';
    }, 200)
  }

};

我将如何使用Mocha+Chai+Sinon测试
someFunction

有几种可能的方法,但听起来你想模拟lodash。为了便于演示,我将线性列出这些步骤,但您可能希望在测试块和挂钩中适当地分布它们。我还假设对
debounce
的唯一调用是所讨论的方法。如果不是,则相应地调整以下各项

import * as Lodash from "lodash";
const debounce = sinon.stub(Lodash, "debounce").returns(() => {});
// create your component
expect(debounce.calledOnce).to.equal(true);
expect(debounce.firstCall.args[0]).to.be.a("function");
expect(debounce.firstCall.args[0]()).to.equal("test");
Lodash.debounce.restore();

你试过什么?根据您想要模拟的程度,有几种可能的方法。我已经尝试过模拟、存根和使用假计时器,包括从“lodash”中将lodash导入为lodash,如
import*。
那么您想要模拟lodash还是使用它?或者更准确地说,你想测试什么?是否要验证您的方法是否调用lodash?是否要验证该方法是否确实会去弹性?等等。如果您正在进行严格的单元测试,那么您将假定lodash正在运行,并且只验证它是否被正确调用。如果要扩展到单元测试之外,可以在测试和验证去抖动中加入lodash。等等。我想测试我函数的核心(在本例中,它返回“true”)。我可以假设lodash debounce有效,不需要测试。问题是,单元测试将在函数执行之前完成,并且它不会返回承诺,因此我不能仅使用
done
See来获取返回承诺、lifesaver!当我尝试您的方法时,我得到了
错误:尝试对未定义的
的stub属性“去Bounce”。如果我在测试定义中需要Lodash,Sinon不会抱怨,但我认为存根只是测试文件的本地文件,不会影响将Lodash拉入Vue组件。