javascript - 如何从 karma 测试中模拟dom元素

标签 javascript angularjs unit-testing karma-jasmine

有一个输入类型文件元素。多次上传angular文件时,该值没有被清除。因此使用普通的 javascript dom 操作手动清除它。

代码如下:

function removeFromQueue(item) {
        vm.uploads.uploader.removeFromQueue(item);
        // Clearing input file field for re-uploading
        if(!vm.uploadFile) {
            document.getElementById('upload-file-' + vm.type).value = null;
        }
    }

在这种情况下,无法模拟 document.getElementById,因此使用单元测试用例中的 vm.uploadFile undefined variable 控制它是错误的。如何在这里模拟 dom 元素?

最佳答案

您应该能够 spyOn document.getElementById 并返回有用的属性(即此处的 value)。像这样,

spyOn(document, "getElementById").and.callFake(function() {
    return {
        value: 'test'
    }
}); 

然后如果你愿意,你可以期待它被调用,

expect(document.getElementById).toHaveBeenCalledWith('...')

关于javascript - 如何从 karma 测试中模拟dom元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43973534/

相关文章:

javascript - 如何使用 javascript 设置事件元素的样式

javascript - 如何在运行时从上传列表中跳过或删除某些文件

json - 无法读取 gulp-browserify 中未定义的属性 'emit'

angularjs - 选择 md-radio-button 中的选项时启用 md-checkbox

javascript - 在加载特定 iframe 元素 ID 之前隐藏父页面中的表单

javascript - HTML5 - 延迟 Canvas 绘制

html - AngularJs 的编辑器?

c# - 如何模拟 IRepository<T>?

asp.net-mvc-3 - 一个单元如何测试实际在扩展方法中使用助手的 HtmlHelper

jquery - 监视 Jasmine 中的 JQuery 选择器