gpt4 book ai didi

javascript - Sinon.js 的意外行为

转载 作者:太空宇宙 更新时间:2023-11-04 00:22:53 26 4
gpt4 key购买 nike

我正在尝试 stub Stripe使用Mocha进行单元测试的模块和 Sinon.js .

我需要这样的 Stripe :

const stripe = require('stripe');
const stubbedStripeClient = stripe.Stripe('test');

在我的测试的根部(在我的顶级describe()内)我有这个:

before('stub root', () => {
sinon.stub(stripe, 'Stripe').returns(stubbedStripeClient);
});

然后,在我实际调用 Stripe 方法的 describe() block 中,我有这个 before() 钩子(Hook):

let stub;
before('stub', () => {
console.log(typeof stubbedStripeClient.customers.create);
stub = sinon.stub(stubbedStripeClient.customers, 'create', ({id: 'a-stripe-customer-id'}));
});

这就是我不明白发生了什么的地方。 Hook 中的第一行 (console.log) 输出:

function

第二行抛出此异常:

TypeError: Attempted to wrap undefined property create as function

这怎么可能?它怎么可能在一行中是一个函数,而在下一行中却是未定义的?

我查看了Sinon.js源码,执行了这个检查here 。如果我再看看他们的isFunction函数,它执行与我在 console.log 中相同的检查。我很困惑。

最佳答案

这是一条不幸且具有误导性的错误消息。

stub 调用的第三个参数不是函数而是对象。来自 the docs它必须是一个函数。

要解决此问题,请更改:

({id: 'a-stripe-customer-id'})

类似:

() => { return {id: 'a-stripe-customer-id'}; }

...如果您想返回该对象,或者您可能希望将该对象作为参数:

({id: 'a-stripe-customer-id'}) => {}

关于javascript - Sinon.js 的意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43925145/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com