如何使用jasmine-jquery测试此函数?

时间:2015-05-29 07:17:42

标签: 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);
    });
});

我加载的fixture文件看起来像这样:

<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>

它给出了这些错误:

  

预期({length:0,prevObject:({0:HTMLNode,context:HTMLNode,length:1}),context:HTMLNode,selector:'selectTypeWrapper'})使prop'禁用'。

     

预期未定义为假。

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

1 个答案:

答案 0 :(得分:1)

你的选择器错了;它应该是$("#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。

另见: