我对如何在浏览器中全局模拟文件选择器感兴趣。具体来说,我最感兴趣的是在Firefox中执行此操作,但更喜欢通用解决方案。
我只关心防止文件选择器对话框出现。我不需要能够断言它确实打开了。问题是我对打开文件选择器的 JavaScript 代码进行了单元测试。当对话框打开时,它会停止执行测试套件。
一个示例情况是我正在测试onRender
. Backbone.View
该方法呈现一个子视图,该子视图将在呈现时打开文件选择器。由于我不直接测试该子视图,因此当我只对方法的其他部分进行单元测试感兴趣时,我不希望模拟它的部分行为onRender
。
例子:
//Test file
it("should do something", function() {
var view = new App.Views.SomeView();
spyOn(view.modelBinder, "bind");
view.render();
expect(view.modelBinder.bind).toHaveBeenCalled();
});
//View file
onRender : function () {
this.modelBinder.bind(this.el, this.model);
this.$("#thing").html(this.subview.render().el); //This line has a side effect that opens file picker
}
本质上,我不想明确地模拟导致文件选择器打开的行为,因为这不是我在这里测试的兴趣所在。这样做会使测试套件变得更加脆弱和难以维护。