gpt4 book ai didi

javascript - 无法使用 Sinon 在导入的文件中 stub 函数调用

转载 作者:行者123 更新时间:2023-11-30 00:00:25 25 4
gpt4 key购买 nike

我想断言 trackPushNotification 正在我的 notifier.send 函数中调用。 trackPushNotification 和 send 函数都在同一个文件中。
我假设我应该使用 Sinon 对 trackPushNotification 进行 stub ,以便能够跟踪 callCount 属性。当我执行我的测试时,trackPushNotification 似乎根本没有被 stub 。我搜索了一些东西,显然它与我使用 ES6 导入/导出的方式有关。我找不到答案,所以我希望有人能帮助我解决这个问题。

notifier.send 函数如下所示:

export const send = (users, notification) => {
// some other logic

users.forEach(user => trackPushNotification(notification, user));
};

我的 notifier.trackPushNotification 函数如下所示:

export const trackPushNotification = (notification, user) => {
return Analytics.track({ name: 'Push Notification Sent', data: notification.data }, user);
};

我的测试用例是这样的:

it('should track the push notifications', () => {
sinon.stub(notifier, 'trackPushNotification');

const notificationStub = {
text: 'Foo notification text',
data: { id: '1', type: 'foo', track_id: 'foo_track_id' },
};

const users = [{
username: 'baz@foo.com',
}, {
username: 'john@foo.com',
}];

notifier.send(users, notificationStub);

assert.equal(notifier.trackPushNotification.callCount, 2);
});

还做了一个快速测试:

// implementation.js
export const baz = (num) => {
console.log(`blabla-${num}`);
};

export const foo = (array) => {
return array.forEach(baz);
};

// test.js
it('test', () => {
sinon.stub(notifier, 'baz').returns(() => console.log('hoi'));

notifier.foo([1, 2, 3]); // outputs the blabla console logs

assert.equal(notifier.baz.callCount, 3);
});

最佳答案

这是您可以测试它的一种方法。请注意调用trackPushNotification时需要this语句

模块:

class notificationSender {
send(users, notification){

users.forEach(user => this.trackPushNotification(notification, user));
}

trackPushNotification(notification, user){
console.log("some");
}

}


export default notificationSender;

导入测试

import notificationSender from './yourModuleName';<br/>

测试

    it('notifications', function(){
let n = new notificationSender();
sinon.spy(n,'trackPushNotification');

n.send(['u1','u2'],'n1');
expect(n.trackPushNotification.called).to.be.true;

});

关于javascript - 无法使用 Sinon 在导入的文件中 stub 函数调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40747326/

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