我正在为一个Ember 2.16组件编写集成测试,并且正在测试一些用户操作。
其中一个使用者动作会呼叫window.confirm()
,询问使用者是否确定要在删除项目之前删除项目。
我想测试此组件的功能,包括接受和拒绝确认。组件操作类似于:
delete(id){
if(confirm('Are you sure you want to delete?')){
//do stuff
} else {
//do other stuff
}
}
在我的集成测试中,我成功地单击了按钮以显示提示符,但是我遇到了以下错误:[Testem] Calling window.confirm() in tests is disabled, because it causes testem to fail with browser disconnect error.
个
如何创建一个将绕过window.confirm()
功能的集成测试?
我已经在我的组件中添加了一种方法,用于在env处于“测试”模式时绕过确认,但这实际上没有帮助,因为我没有测试依赖于window.confirm()
的代码部分。
我四处查看是否有可以传递给组件的变量,以使window.confirm()
为true/false,但没有成功。
我如何创建一个测试来测试一个在操作中调用window.confirm()
的组件?
2条答案
按热度按时间axzmvihb1#
一个解决方案是保存
window.confirm
的原始实现,并在测试之前编写自己的实现,然后在测试结束时恢复原始实现。我会这样做:
6jjcrrmo2#
我会在测试中使用像sinon这样的库来存根
window.confirm()
,我希望它被调用,这样:1.希望不会出现错误消息
1.我知道
confirm()
实际上是由代码调用的,并且执行我希望它执行的操作(也就是说,我可以将它设置为一个简单的fn)1.它可以被恢复,这样警告消息将被记录在其他测试中(这很有帮助)
根据测试代码,它覆盖
window.confirm()
以打印此警告消息:因此,在测试Sinon时做这样的事情应该是可行的: