Javascript 测试期间未触发提线针
我正在编写测试,其中我在onAttach生命周期方法中有一些逻辑,但在测试时,从未调用onAttach 这就是我最初尝试测试它的方式Javascript 测试期间未触发提线针,javascript,backbone.js,jasmine,marionette,Javascript,Backbone.js,Jasmine,Marionette,我正在编写测试,其中我在onAttach生命周期方法中有一些逻辑,但在测试时,从未调用onAttach 这就是我最初尝试测试它的方式 beforeEach(() => { view = new OffersTab(); view.render(); }); 但我的理解是当显示区域时它会被触发,所以我尝试这样做 beforeEach(() => { let parentView = new AllOffers(); parentVi
beforeEach(() => {
view = new OffersTab();
view.render();
});
但我的理解是当显示区域时它会被触发,所以我尝试这样做
beforeEach(() => {
let parentView = new AllOffers();
parentView.render();
parentView.getRegion('offersTab').show(new OffersTab());
view = parentView.getRegion('offersTab');
});
但是onAttach仍然没有启动,使我无法编写测试视图上的与区域上的之间存在差异。(使用
onAttach
方法是一种方便的方法,不需要通过listenTo
进行订阅)
贴上
当视图显示在区域中时,会触发attach
事件,该事件会将视图附加到DOM中,并附加到页面的文档中有其祖先的元素(document.documentElement
)。这意味着视图的元素(el
)或父视图或父视图已附加到DOM。仅在父视图的区域中显示视图是不够的。首先,当父视图被附加到DOM中时,事件将被递归地触发到所有子视图
在显示子视图之前,您可以通过测试父视图来检查它:
//All将返回false
document.documentElement.contains(parentView.el);
木偶。是节点连接的(parentView.el);
parentView.isAttached();
如果您的视图需要附加到DOM才能正常工作,则必须选择DOM中的元素并在其中显示父视图。例如,在document.body
中:
let body、parentView、view;
在(()=>{//mocha's“在所有人之前”
body=新的木偶区域({el:'body'});
});
在每个之前(()=>{
parentView=新的AllOffers();
body.show(parentView);//将父视图附加到DOM
视图=新报价表();
parentView.getRegion('offersTab').show(视图);
});
之后(()=>{
body.empty();//分离并销毁视图
});
或者,您可以将AllOffers
附加到DOM本身的代码。或者将DOM中的元素传递给其构造函数,例如:newalloffers({el:body})
。当你不需要它的时候,别忘了把它毁掉
显示
当视图显示在区域中时,将在区域而不是视图上触发事件show
。(我写的是木偶3或更新版本。木偶2触发了视图上的show
事件。)
如果您的事件处理程序需要在父视图区域中显示视图之后执行,而不是在DOM中出现视图之后,请考虑将代码移动到(或<代码> OnReals< /Cult>方法)。您可以在区域上收听
show
事件,并在子视图上重新触发它,但您最好遵循木偶的最佳实践,并且。在视图上和在区域上有区别。(使用onAttach
方法是一种方便的方法,不需要通过listenTo
进行订阅)
贴上
当视图显示在区域中时,会触发attach
事件,该事件会将视图附加到DOM中,并附加到页面的文档中有其祖先的元素(document.documentElement
)。这意味着视图的元素(el
)或父视图或父视图已附加到DOM。仅在父视图的区域中显示视图是不够的。首先,当父视图被附加到DOM中时,事件将被递归地触发到所有子视图
在显示子视图之前,您可以通过测试父视图来检查它:
//All将返回false
document.documentElement.contains(parentView.el);
木偶。是节点连接的(parentView.el);
parentView.isAttached();
如果您的视图需要附加到DOM才能正常工作,则必须选择DOM中的元素并在其中显示父视图。例如,在document.body
中:
let body、parentView、view;
在(()=>{//mocha's“在所有人之前”
body=新的木偶区域({el:'body'});
});
在每个之前(()=>{
parentView=新的AllOffers();
body.show(parentView);//将父视图附加到DOM
视图=新报价表();
parentView.getRegion('offersTab').show(视图);
});
之后(()=>{
body.empty();//分离并销毁视图
});
或者,您可以将AllOffers
附加到DOM本身的代码。或者将DOM中的元素传递给其构造函数,例如:newalloffers({el:body})
。当你不需要它的时候,别忘了把它毁掉
显示
当视图显示在区域中时,将在区域而不是视图上触发事件show
。(我写的是木偶3或更新版本。木偶2触发了视图上的show
事件。)
如果您的事件处理程序需要在父视图区域中显示视图之后执行,而不是在DOM中出现视图之后,请考虑将代码移动到(或<代码> OnReals< /Cult>方法)。您可以在区域上收听
show
事件,并在子视图上重新触发它,但您最好遵循木偶的最佳实践,并且。是否检查它是否确实连接到DOM?可能它在测试中没有找到正确的选择器。您是否检查了它是否确实连接到DOM?也许它在测试中没有找到正确的选择器