Javascript 我应该测试Vue.js私有函数吗?
因此,在阅读并观看了Vue.js提供的内容后,我决定只测试组件的行为。但我可能误解了这个概念。以下是组件:Javascript 我应该测试Vue.js私有函数吗?,javascript,unit-testing,vue.js,vs-unit-testing-framework,Javascript,Unit Testing,Vue.js,Vs Unit Testing Framework,因此,在阅读并观看了Vue.js提供的内容后,我决定只测试组件的行为。但我可能误解了这个概念。以下是组件: 跳过上载 导出默认值{ 数据:()=>({ 上载扫描对话框:false, }), 方法:{ //这里的公共功能将被测试 skipScan(){ hideDialog(); triggerSkipScan(); }, }, } //正如vue.js所建议的,这里的私有函数 函数hideDialog(){ this.uploadScanningDialog=false; } .... 我想
跳过上载
导出默认值{
数据:()=>({
上载扫描对话框:false,
}),
方法:{
//这里的公共功能将被测试
skipScan(){
hideDialog();
triggerSkipScan();
},
},
}
//正如vue.js所建议的,这里的私有函数
函数hideDialog(){
this.uploadScanningDialog=false;
}
....
我想测试一下这种行为:
it('should hide itself and show next dialog when Scan Button is clicked', () => {
const data = {
uploadScanningDialog: true,
};
wrapper.setData(data);
expect(wrapper.vm.uploadScanningDialog).toBeTruthy();
wrapper.find('.a').trigger('click');
expect(wrapper.vm.uploadScanningDialog).toBeFalsy();
});
以下是问题和错误:
通常,如果可能,最好通过其公共api对代码进行单元测试。 这提高了可维护性,如:
- 它允许您重构任何私有函数,而无需更新单元测试李>
- 如果您对私有函数进行了更改,那么可以通过对公共api运行单元测试来断言您没有破坏任何东西
后者提供了更大的测试覆盖率,因为如果您已经在模板中正确地将事件连接到事件处理程序函数,那么您也在进行测试;但它的可维护性稍差,就好像您更改了模板,可能需要更新测试一样。1。对2.不。你应该只模拟协作者,而不是你声称要测试的组件的一部分。@jornsharpe你的意思是,我也应该测试我的私有函数,比如“hideDialog”?我回答“我不应该测试私有函数吗?”时说“不”。Private意味着Private。那么我应该嘲笑我所有的私有函数,比如hideDialog吗?因为我的测试失败了,因为它们的实际实现被调用了。你不应该模拟你想要测试的任何函数——你应该针对这些私有函数的实际实现运行测试,但不应该直接调用私有函数。您应该通过您的公共api测试私有函数,并且您发布的测试似乎正确地完成了这一点。