我想在初始化完成后但在promises解决之前测试控制器的状态。
我有一个按钮被禁用(按类),直到加载完成:
.select2-container--default .select2-selection--single
{
background-color: #21262d;
border-color: #21262d;
border-top-color: #21262d;
border-right-color-value: #21262d;
border-bottom-color: #21262d;
border-left-color-value: #21262d;
height: 34px;
}
初始化控制器时,会进行ajax调用,当它结算时,isLoading设置为false:
<button ng-class="{disabled: isLoading}">Show</button>
当我使用量角器测试按钮时,没有禁用的类。
$scope.isLoading = true;
$http.get('/list')
.then(function(response) {
$scope.list = response.data;
$scope.isLoading = false;
});
我修改了按钮以获得另一个课程,只是为了看到我没有去疯狂:
it('should enable the button after load completes', function() {
element(by.buttonText('Show')).getAttribute('class')
.then(function(buttonClasses) {
expect(buttonClasses).toContain('disabled');
});
});
和测试:
<button ng-class="{disabled: isLoading, enabled: !isLoading}">Show</button>
现在测试通过了。
我猜测it('should show the select tables list after clicking the Change button', function() {
element(by.buttonText('Show')).getAttribute('class')
.then(function(buttonClasses) {
expect(buttonClasses).toContain('enabled');
});
});
是控制器初始化过程的一部分。如何测试按钮之前按钮的状态?
答案 0 :(得分:1)
您可以在找到元素/类之前设置browser.ignoreSynchronization = true
,以便不等待应用中的promises解析
it('should show the select tables list after clicking the Change button', function() {
browser.ignoreSynchronization = true;
expect(element(by.buttonText('Show')).getAttribute('class')).toContain('disabled');
browser.ignoreSynchronization = false;
});
请注意,您很少需要对.then
使用expect
回调,因为expect
会处理对承诺的解包。