断言所有复选框的确认

时间:2014-06-08 11:07:44

标签: javascript jquery angularjs jasmine

我有5个具有相同名称属性relative-view的复选框。

我想断言所有这些都经过检查。我可以这样做来检查第一个和最后一个

expect(element.find('input[name="relative-view"]').first().prop("checked")).toBe(true);
expect(element.find('input[name="relative-view"]').last().prop("checked")).toBe(true);

但我不知道怎么检查它们。我试过以下但是我得到一个错误,说未定义不是函数

expect(element.find('input[name="relative-view"]')[0].prop("checked")).toBe(true);
expect(element.find('input[name="relative-view"]')[1].prop("checked")).toBe(true);
expect(element.find('input[name="relative-view"]')[2].prop("checked")).toBe(true);
expect(element.find('input[name="relative-view"]')[3].prop("checked")).toBe(true);
expect(element.find('input[name="relative-view"]')[4].prop("checked")).toBe(true);

我该怎么做?

2 个答案:

答案 0 :(得分:4)

[n]表示法返回没有.prop()的DOM元素 - 即jQuery API。使用.eq()

var boxes = element.find('input[name="relative-view"]');

expect(boxes.eq(0).prop("checked")).toBe(true);
expect(boxes.eq(1).prop("checked")).toBe(true);
expect(boxes.eq(2).prop("checked")).toBe(true);
expect(boxes.eq(3).prop("checked")).toBe(true);
expect(boxes.eq(4).prop("checked")).toBe(true);

另一种方法是使用标准.checked属性:

var boxes = element.find('input[name="relative-view"]').get();

expect(boxes[0].checked).toBe(true);
expect(boxes[1].checked).toBe(true);
expect(boxes[2].checked).toBe(true);
expect(boxes[3].checked).toBe(true);
expect(boxes[4].checked).toBe(true);

另外,尝试迭代jQuery集合:

$('input[name="relative-view"]', element).each(function () {
    expect(this.checked).toBe(true);
});

答案 1 :(得分:2)

您可以编写一个函数,该函数将遍历所有复选框,如果未选中任何复选框,则返回false。使用:

function CheckAllCheckboxes(){
    var _RetValue = true;
    $('input[name="relative-view"]').each(function(){
        if($(this).prop("checked") != true)
            _RetValue = false;
            return false; // quit from each()
    }
    return _RetValue;
}

然后你可以使用

expect(CheckAllCheckboxes()).toBe(true);