我想要断言在我的
我认为应该使用Sinon来存根
我的`notifier.trackPushNotification`函数看起来是这样的:
notifier.send
函数内调用了trackPushNotification
。 两个函数均位于同一文件内。我认为应该使用Sinon来存根
trackPushNotification
以便能够跟踪callCount
属性。但是当我执行测试时,trackPushNotification
似乎根本没有被存根。 我搜索了一些内容,显然这与我使用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);
});
this
关键字解决了我的问题。没有它,sinon 似乎无法找到应该被 stub 的方法 :) - Benjamin Guttmann