我可以在茉莉花单元测试中伪造存储事件吗

Can I fake a storage event in my jasmine unit tests?

本文关键字:存储 事件 伪造 茉莉花 单元测试 我可以      更新时间:2023-09-26

我将需要处理一些存储事件。

window.addEventListener('storage', listener);

我正在尝试用jasmine对我的代码进行单元测试。

在测试中使用setItem(key, value)简单地将一些东西放入localStorage中是行不通的,因为在设计中不会为事件的发起者引发事件。

一开始使用$(window).trigger('storage'...似乎是个好主意,但我认为这是不对的。

我看到一些帖子询问如何用spyOn模拟本地存储,但我找不到任何处理事件的帖子。

这就成功了:

window.dispatchEvent(new StorageEvent('storage', {
    key: 'test_key', 
    newValue: 'test_value' 
});

对于IE中的奖励积分:

var se = document.createEvent('StorageEvent');
se.initStorageEvent('storage', false, false, 'test_key', null, 'test_value', '/', null);
window.dispatchEvent(se);

很抱歉作为答案(没有代表评论):

我建议从回答问题开始:"你想测试什么?"

  • 如果您正在测试事件处理程序,请调用它并提供事件的模拟
  • 如果你想确保你已经附加了处理程序-spyOn,并检查它是否已附加

据我所知,您正在编写一个单元测试,然后测试您的单元并模拟所有外部依赖关系。手动触发事件似乎更像是模拟浏览器。

如果我错了,请详细解释你的情况。