Sinon JS Stubbing / Mocking undefined properties

时间:2017-12-09 17:37:28

标签: sinon

我希望有人可以帮我解决一个小问题。我试图在函数内部存在一个未定义的属性并返回一个已知值,我试着用一个简单的测试用例:

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。

我们使用自己的软件处理依赖注入(例如,在我们的软件人员运行期间可用)但我们正在尝试在软件之外编写隔离的单元测试,因此必须删除缺少的依赖项。

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

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

山姆

1 个答案:

答案 0 :(得分:-1)

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

它不太理想,因为如果您正在更改要测试的代码,它往往会成为代码气味,尽管它符合您的具体问题。

我还假设您正在使用提供mocha& before的{​​{1}}之类的内容。 afterEach函数。

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