最初承诺解决之前的量角器测试

时间:2015-05-05 18:06:31

标签: javascript angularjs protractor

我想在初始化完成后但在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'); }); }); 是控制器初始化过程的一部分。如何测试按钮之前按钮的状态?

1 个答案:

答案 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会处理对承诺的解包。