我在应用程序中有一个JavaScript组件,处理无限滚动分页,并试图重写它以使用IntersectionObserver,如此处所述,但是在测试时遇到了问题。
有没有一种方法可以在QUnit测试中驱动观察器的行为,例如使用在我的测试中描述的某些条目触发观察器回调函数?
我想到的一个可能的解决方案是在组件的原型中公开回调函数,并在我的测试中直接调用它,类似于以下内容:
我不太喜欢这种方法,因为它暴露了组件内部使用
有没有一种方法可以在QUnit测试中驱动观察器的行为,例如使用在我的测试中描述的某些条目触发观察器回调函数?
我想到的一个可能的解决方案是在组件的原型中公开回调函数,并在我的测试中直接调用它,类似于以下内容:
InfiniteScroll.prototype.observerCallback = function(entries) {
//handle the infinite scroll
}
InfiniteScroll.prototype.initObserver = function() {
var io = new IntersectionObserver(this.observerCallback);
io.observe(someElements);
}
//In my test
var component = new InfiniteScroll();
component.observerCallback(someEntries);
//Do some assertions about the state after the callback has been executed
我不太喜欢这种方法,因为它暴露了组件内部使用
IntersectionObserver
的事实,而在我看来,这是一个不应该对客户端代码可见的实现细节,所以有没有更好的方法来测试它(最好不使用jQuery)?