Javascript 我可以在jasmine单元测试中伪造存储事件吗?

Javascript 我可以在jasmine单元测试中伪造存储事件吗?,javascript,Javascript,我需要处理一些存储事件 window.addEventListener('storage', listener); 我正试图用jasmine对我的代码进行单元测试 在测试中使用setItem(key,value)简单地将某些内容放入localStorage是不起作用的,因为根据设计,事件不会为事件的发起人引发 开始使用$(window.trigger('storage')…似乎是个好主意,但我认为这不对 我看到过一些帖子,问我如何用spyOn模拟本地存储,但我找不到任何处理事件的帖子。很抱歉回

我需要处理一些存储事件

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);

为什么不传递一个模拟的
窗口
?我正在使用localStorage进行消息传递,当localStorage从另一个选项卡或框架更改时,将引发一个事件。我对测试浏览器是否工作不感兴趣,我可能想对IE8存储事件的一些处理进行单元测试,但主要是希望对我的其余代码进行输入。如果您有n事件处理程序您可以在测试中手动调用它,并通过创建具有预期结构和值的对象来提供事件。