首页 > 解决方案 > 使用 sinon 在类的实例上存根方法

问题描述

我是新来的 sinon 测试并试图掌握存根的窍门。我正在尝试测试一个接收请求对象的函数,从中获取一些属性,然后将其传递给向外部服务发出获取请求的类的实例。

前任:

exports.getMyThings = (req) => {
  const reqOpts = {
    qs: req.query
  };

  return apiInstance.get(req.route, reqOpts);
};

apiInstance在我导出getMyThings函数的文件中实例化。

我正在尝试删除该apiInstance.get方法,以便我可以测试我的getMyThings函数是否正常工作并将正确的参数传递给它。

我试图通过将类导入我的测试文件来编写存根,然后创建一个存根实例:

const MyClass = require('.../blahblah)
const apiInstance = sinon.createStubInstance(MyClass);

const apiInstance = new MyClass();
apiInstance.get = sinon.stub();

但在我的getMyThings函数内部,该apiInstance.get方法不是包装的——它是原始的。包装的实例仅存在于我的测试中。这是有道理的,但我不知道如何解决它。任何想法表示赞赏。

标签: javascriptunit-testingsinon

解决方案


您可以使用,

const returnMe = () => 'sinon rocks!';
sinon.stub(apiInstance, 'get').callsFake(returnMe);


result = apiInstance.get();
// Do asssertion for result to equal to the returnMe();

希望能帮助到你。


推荐阅读