2016-11-27 1 views
1

확인란 목록과 상단에 all 확인란이 있습니다. 모든 체크 박스를 토글하면 모든 체크 박스가 선택 취소되거나 선택됩니다.각도기가 isSelected 확인란을 다시 활성화 한 후에 잘못된 값을 표시합니다.

기본값/처음에는 모든 체크 박스가 선택된 상태에서 all 체크 박스가 사용됩니다. 따라서 모든 확인란을 선택 취소하면 모든 확인란이 선택 취소됩니다. 이 각도기에서 문제없이 더 통과하지 :

it('all checkbox is deselected', function() { 
    modelsAllCheckbox.click(); 
    expect(modelsAllCheckbox.isSelected()).to.eventually.be.false; 
    }); 

    it('all models should be deselected', function() { 
    ppvPercentages.modelChoices().then(function(modelChoices) { 
     modelChoices.forEach(function(modelChoice) { 
     expect(modelChoice.isSelected()).to.eventually.be.false; 
     }); 
    }); 
    }); 

    this.modelChoices = function(rowNumber) { 
    return element.all(by.repeater('model in vehicleCheckboxes.models')); 
    } 

그런 다음 나는 all 체크 박스를 다시 활성화하십시오. 시각적으로 브라우저에서 모든 체크 박스가 체크/체크되고있는 모든 체크 박스를 체크 할 수 있습니다. Hoewever이 시험에 그들이 모두 선택 주장 실패

it('all button is re-enabled', function() { 
    modelsAllCheckbox.click(); 
    expect(modelsAllCheckbox.isSelected()).to.eventually.be.true; 
    // give time for all models to set 
    browser.sleep(3000) 
    }); 

    it('all models are selected', function() { 
    ppvPercentages.modelChoices().then(function(modelChoices) { 
     modelChoices.forEach(function(modelChoice) { 
     expect(modelChoice.isSelected()).to.eventually.be.true; 
     }); 
    }); 
    }) 

<div class="overflow-container"> 

    <!-- all checkbox --> 
    <input type="checkbox" 
    ng-model="vehicleAllCheckbox.models" 
    ng-change="toggleAllModels(vehicleAllCheckbox, vehicleCheckboxes.models, vehicleCheckboxes.year)">All 

    <div ng-repeat="model in vehicleCheckboxes.models | orderBy: 'description' track by model.description"> 
    <!-- the rest of the checkboxes --> 
    <input type="checkbox" 
     ng-change="modelCheckboxToggle()" 
     ng-model="model.checked" > 
    {{model.description}} 
    </div> 
</div> 

나는 모든 체크 박스가 viusally 브라우저에서 체크를 참조하십시오. modelChoice.isSelected()이 true가 아닌 모든 체크 박스를 다시 활성화하는 이유는 무엇입니까?

답변

2

문제는 확인란의 위치에 있습니다. 보조 노트로

this.modelChoices = function(rowNumber) { 
    return element.all(by.repeater('model in vehicleCheckboxes.models')).all(by.model('model.checked')); 
} 

: input 요소 (당신의 체크 박스)에 대신

<div ng-repeat="model in vehicleCheckboxes.models | orderBy: 'description' track by model.description"> 

, 포인트 modelChoices : 당신이 by.repeater() 로케이터를 사용하고 있기 때문에 현재는 부모에게 div 요소를 대상으로하는 체크 박스를 선택하는 방법을 향상시킬 수 있다고 생각합니다. .each() :

를 사용하여
ppvPercentages.modelChoices().each(function (modelChoice) { 
    expect(modelChoice.isSelected()).to.eventually.be.true; 
}); 

또는 :뿐만 아니라 다른 방법이 있습니다

var allSelected = ppvPercentages.modelChoices().reduce(function (acc, modelChoice) { 
    return modelChoice.isSelected().then(function (isSelected) { 
     return acc && isSelected; 
    }); 
}, true); 
expect(allSelected).to.eventually.be.true; 

또는.

+0

좋은 정보, 감사합니다! – dman

관련 문제