Javascript 如何正确地进行按钮点击的茉莉花测试
我最近开始使用Jasmine进行javascript测试,我遇到了一个问题。我相信这里有人能帮我 我有以下简单代码,发布在: HTML:Javascript 如何正确地进行按钮点击的茉莉花测试,javascript,jquery,jasmine,Javascript,Jquery,Jasmine,我最近开始使用Jasmine进行javascript测试,我遇到了一个问题。我相信这里有人能帮我 我有以下简单代码,发布在: HTML: 删除Div CSS: .container{ 显示器:flex; 弯曲方向:立柱; 填充:20px; 背景色:#eef; } 钮扣{ 填充:10px0; 字号:1rem; 背景色:#fdd; } #托拜雷斯{ 填充:10px; 边框:1px实心#ffdddd; 背景色:#ffccdd; 边缘底部:20px; } 还有JavaScript: const-e
删除Div
CSS:
.container{
显示器:flex;
弯曲方向:立柱;
填充:20px;
背景色:#eef;
}
钮扣{
填充:10px0;
字号:1rem;
背景色:#fdd;
}
#托拜雷斯{
填充:10px;
边框:1px实心#ffdddd;
背景色:#ffccdd;
边缘底部:20px;
}
还有JavaScript:
const-eraseDiv=()=>{
const myDiv=$(“#toBeErased”);
myDiv.children('p')。淡出(300,()=>{
myDiv.fadeOut(600,()=>{
myDiv.remove();
});
})
}
常量addMyDiv=()=>{
常数myDiv=$(`
此div及其所有内容将被删除。
单击下面的按钮将其删除。
`);
if(!document.queryselectoral('#tobeerase').length){
$('div.container').append(myDiv);
}
};
$(文档).ready(()=>{
$('button#btneratesiv')。在('click',()=>{
擦除div();
});
});
//现在开始测试
描述(“擦除按钮功能”,()=>{
在每个之前(()=>{
addMyDiv();
});
它('当btnEraseDiv单击时应删除div-使用async',async()=>{
//这里的测试是模糊的
常量btn=$(“按钮生成IV”);
等待btn。单击();
expect($('div#toBeErased').length)。小于(1);
});
它('当bGeneraseDiv单击时应删除div-使用完成和超时',(完成)=>{
//这是有效的,但我肯定它不是正确的用法
常量btn=$(“按钮生成IV”);
点击();
设置超时(()=>{
expect($('div#toBeErased').length)。小于(1);
完成();
}, 2000);
});
});
阅读文档,我得出了这个测试失败:
it('当bGeneraseDiv单击时应该删除div-使用async',async()=>{
//这里的测试是模糊的
常量btn=$(“按钮生成IV”);
等待btn。单击();
expect($('div#toBeErased').length)。小于(1);
});
然后我让另一个的超时时间大于淡出持续时间,它可以工作,但感觉不合适
it('当bGeneraseDiv单击时应删除div-使用完成和超时',(完成)=>{
//这是有效的,但我肯定它不是正确的用法
常量btn=$(“按钮生成IV”);
点击();
设置超时(()=>{
expect($('div#toBeErased').length)。小于(1);
完成();
}, 2000);
});
有人能给我指出正确的方向,或者给我举个例子说明这种情况吗
谢谢你抽出时间 我认为您使用done
param的“不正确”解决方案实际上是一个不错的选择。使用async
/await
的第一个解决方案不太可行,因为jQueryclick()
方法没有返回可等待的类型(承诺或“thenable”)
如果您希望使用异步
/等待
解决方案,您可以尝试以下方法:
//为测试添加可重用的实用工具方法。
const wait=async ms=>new Promise(res=>setTimeout(res,ms));
它('当btnEraseDiv单击时应删除div-使用async',async()=>{
$(“按钮生成IV”)。单击();
等待等待(2000);//等待动画完成。
expect($('div#toBeErased').length)。小于(1);
});
旁注
您可能需要考虑的另一件事,特别是如果您要编写和维护大量UI测试,使用E2E/UI测试库,比如,Seleor,或者(如果您使用角度)。
这些库将允许您编写独立于实现代码的测试。您可以在普通浏览器或无头浏览器实例中运行它们。它们都内置了“驱动程序”API函数,允许您“等待”某些DOM条件。例如,来自Nightwatch的
waitForElementPresent()
,或来自Puppeter的waitForSelector()
。有更多的API方法可以帮助您轻松编写可维护的E2E/UI测试。谢谢,我将尝试夜视。