【问题标题】:How do you test chained function calls with sinon?你如何用 sinon 测试链式函数调用?
【发布时间】:2018-04-20 01:57:40
【问题描述】:

我正在测试的代码是:

obj.getTimeSent().getTime();

其中obj.getTimeSent() 返回一个日期,然后在该日期调用getTime()

为了存根这个功能,我尝试了这个:

const timeStub = sandbox.stub(Obj, 'getTimeSent').callsFake(() => {
   return 1 //Doesn't matter what it returns
});

sinon documentation 表示 callsFake()“在调用时使存根调用提供的 fakeFunction”,但出现错误“TypeError: obj.getTimeSent(...).getTime is not a function”

【问题讨论】:

  • 但 getTime() 仍在被调用 - 这是不可能的,因为它不是存根所做的。这将导致“getTime 不是函数”错误,但不会导致真正的 getTime 被调用。请提供可以复制问题的stackoverflow.com/help/mcve
  • @estus 你是对的,我错误地认为“getTime 不是函数”错误意味着该函数试图被调用。

标签: javascript unit-testing typescript sinon


【解决方案1】:

一个函数应该返回另一个函数链:

const getTimeStub = sandbox.stub().returns(...);
const getTimeSentStub = sandbox.stub(obj, 'getTimeSent').returns({ getTime: getTimeStub });

【讨论】:

    猜你喜欢
    • 2021-12-17
    • 1970-01-01
    • 2018-02-15
    • 1970-01-01
    • 1970-01-01
    • 2019-03-01
    • 2020-11-06
    • 2017-04-17
    • 1970-01-01
    相关资源
    最近更新 更多