【问题标题】:Sinon JS Stubbing/Mocking undefined propertiesSinon JS Stubbing/Mocking 未定义属性
【发布时间】:2017-12-09 17:37:27
【问题描述】:

我希望有人能够帮助我解决一个小问题。我试图将一个存在于函数中的未定义属性存根并返回一个已知值,我正在尝试使用一个简单的测试用例:

var self = this;


self.test = function() {
  return person.myId();
};


if (typeof module !== "undefined" && module.hasOwnProperty("exports")) {
  module.exports = self;
}


return self;

我尝试做的是:

it('Basic stub test', function() {
  sinon.stub(code, 'person.myId').return("1234");
  assert(code.test(), "1234");
});

我曾希望上述内容会存根对 person.myId() 的任何调用,但是,我只是收到任何错误消息:无法存根不存在的自己的财产 person.myId。

我们使用自己的软件来处理依赖项注入(例如,在运行时我们的软件人员可用),但我们试图在软件之外编写隔离的单元测试,因此有必要剔除缺失的依赖项。

以前有没有人尝试过这种事情?我在尝试做一些不可能的事情吗?

感谢您提供的任何帮助/支持。

山姆

【问题讨论】:

  • 代码中人是如何定义的?
  • person 是一个在运行时使用自定义软件注入并可供脚本使用的对象。
  • 上面的代码可以加还是不加?

标签: sinon


【解决方案1】:

我不确定依赖注入软件有什么魔力,所以这里是一个中间的答案。

这不太理想,因为如果您要更改要测试的代码,它往往会产生代码异味,尽管它符合您的具体问题。

我还假设您正在使用类似 mocha 的东西,它提供了 beforeafterEach 函数。


var sandbox = sinon.createSandbox();

before(function () {
  var person = {
    myId: () => console.log('myId no op'),
  };

  code.person = person;
}

it('Basic stub test', function() {
  sandbox.stub(code.person, 'myId').returns('1234');
  assert(code.test(), '1234');
});

afterEach(function () {
  sandbox.restore();
});

文档链接:http://sinonjs.org/releases/v4.1.3/sandbox/

(虽然这里不严格要求使用sandbox

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-19
    相关资源
    最近更新 更多