如何使用Jasmine/Karma测试对DOM元素的修改
How to test modification to DOM elements with Jasmine/Karma?
我在Javascript中创建了一个简单的函数,当实例化为对象时,它将DOM元素作为参数,然后通过它的各种方法可以修改这个元素,例如显示、隐藏、应用类等。
我想写单元测试来测试它的功能,但不确定什么是最好的方法。
示例如下:
var Ns = {};
Ns.Dropdown = function(options) {
this._$el = $(options.el);
this._$ul = this._$el.find("ul");
}
Ns.Dropdown.prototype.open = function() {
this._$ul.addClass("open");
}
我该如何测试.open()
做了它应该做的事情。它假设通过附加类open
使ul
可见,测试它的最佳方法是什么?我用Jasmine(Karma)创建了这个简短的测试,当它运行时失败了:
describe("DropDown Selector", function() {
var dd;
beforeEach(function() {
var element = document.createElement("div");
element.innerHTML = '<div id="someId" class="">
<span class="trigger"></span>
<ul><li data-value="0"><span>Hourly</span></li>
<li data-value="1"><span>Daily</span></li>
<li data-value="2" class="selected"><span>Weekly</span></li>
</ul></div>';
dd = new Ns.Dropdown({
el: $("#someId")[0]
});
});
it("Should open popup", function() {
dd.open();
expect($("#someId ul").hasClass("open")).toBeTruthy();
});
});
我假设当它运行时,元素还没有附加到DOM中,并且$("#someId ul").hasClass("open")
是false
,即使dd._$ul
上已经打开了类。
在函数对DOM进行修改的情况下,我将如何测试这种事情?
(仅供参考):将元素实际附加到DOM可能会有所帮助。
这是jasmine jquery库中使用的技术,使用它可以编写:
element = document.createElement("div");
...
jasmine.getFixtures().set(element);
...
相关文章:
- 如何在DOM元素上按类型构建此函数
- DOM元素和angular元素之间的主要区别是什么
- 当带有渲染器的DOM元素不在屏幕顶部时,移动了场景的坐标
- 使用jquery创建dom元素会导致ie9出现拒绝访问错误
- 如何在使用Ractive.extend()时引用DOM元素
- 在d3中向DOM元素添加了图像,但现在它赢得了't过渡
- 如何'剪切'DOM元素并将其显示在其他位置
- 转换<a>使用jQuery将文本字符串转换为dom元素
- d3在数据更新时错误地附加了dom元素
- 访问VueJS中的DOM元素
- 在Meteor中如何查找DOM元素(渲染后)
- IE9-添加和删除DOM元素会破坏父keydown事件
- 未捕获错误:元素缓存中id为x的DOM元素与DOM中的元素不同
- 在 ng-if 编译后访问指令中的 DOM 元素
- spin.js/angular spinner:如何将spin定位到DOM元素中(包括plunker演示)
- 如何在dom元素中插入输入标记数据插件
- Mobile Safari、jQuery以及绑定到未来的DOM元素
- 从字符串创建dom元素时添加多个类
- 如何根据客户端的屏幕大小使用javascript更改DOM元素
- 为onClick-hander插入临时DOM元素