javascript - 如何用 jasmine-jquery 测试这个函数?

标签 javascript jquery dom testing jasmine

这是我想测试的功能,但我不知道它是如何工作的。

conflictModalCancel: function () {
    this.$(":disabled").prop("disabled", false);
},

到目前为止我做了什么:

describe("function conflictModalCancel", function(){

    beforeAll(function(){
        loadFixtures('addvehicle.html');
    });

    it ("should set property disabled", function(){
        view.conflictModalCancel();
        expect($("selectTypeWrapper")).toHaveProp("disabled");
        expect($("selectTypeWrapper").prop("disabled")).toBe(false);
    });
});

我正在加载的夹具文件如下所示:

<div id="selectTypeWrapper" type="disabled" disabled="true">
    <div id=".panel">
        <div id=".panel-collapse"></div>
    </div>
</div>
<div id=":disabled"></div>
<select id="selectLanguage"></select>

它给出了这些错误:

Expected ({ length: 0, prevObject: ({ 0: HTMLNode, context: HTMLNode, length: 1 }), context: HTMLNode, selector: 'selectTypeWrapper' }) to have prop 'disabled'.

Expected undefined to be false.

我对所有这些东西都是新手,我可能误解了一些东西。你能帮我写这个测试让我明白如何处理这些问题吗?

最佳答案

您的选择器有误;它应该是 $("#selectTypeWrapper") 因为您要按 ID 查找元素。

我的另一个猜测是 prop("disabled", false) 删除了该属性。

要验证这一点,将函数更改为:

var node = $(":disabled");
console.log('before', node[0].outerHTML);
node.prop("disabled", false);
console.log('after', node[0].outerHTML);

这将向您展示 DOM 在控制台中的样子。

我还检查了 documentation for $.prop() jQuery 1.6 似乎有一些错误。因此,如果您使用的是该版本,请尝试至少升级到 1.6.1。

另见:

关于javascript - 如何用 jasmine-jquery 测试这个函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30523457/

相关文章:

javascript - 文档底部编写的代码总是在 DOM 准备好之后执行吗?

java - 从 xml 文档中提取标签

javascript - 单击单选按钮时隐藏/显示选项

javascript - 如何在 javascript 的 if else 语句中检查parentNode classList

javascript - 如何阻止 div 在函数中的特定点获取任何输入

javascript - 在 casperjs 上提交一个没有名字的表单

jquery - 用于删除前 X 个元素的选择器

jquery - 没有哈希的单个页面上的 Google Analytics

javascript - 如何使用 JQuery 删除加载速度太慢的图像?

javascript - jQuery 新手,需要一些帮助