2014-11-07 5 views
2

그래서 버튼을 클릭하면 약속을하고, 해결하고, 데이터를 얻고, 해당 데이터를 페이지에 표시하는 각도 서비스로 보내는 사이트가 있습니다. 나는 단추를 찾아 클릭하고 데이터를 다시 얻었는지 확인하는 각진 테스트를 원합니다. 그러나 단추가 해결되기 전에 항상 테스트가 완료됩니다. 나는 browser.sleep()를 시도했지만 그저 일시 중지 된 약속은 결코 해결되지 않았다. 분지기에 관한 기타 많은 약속 관련 질문은 도움이되지 않습니다. 그 약속은 시험에서 설정되지 않았으므로 페이지 자체에 있습니다.방아쇠를 당기는 약속이 해결되기를 기다리는 것이 어떻게됩니까?

$scope.rollD2 = function() { 
    diceService.getD2Roll($scope.quantities.d2).then(function (data) { 
     $scope.rolls.d2 = data.roll; 
    }); 
}; 

그리고 다음은

<button id="d2Button" type="button" class="btn btn-success" ng-click="rollD2()">Roll</button> 
<span><b>{{rolls.d2 | number}}</b></span> 

가 클릭에서 호출 된 각 코드의 간단한 요약이다 : 여기
it('should roll a d2', function() { 
    element(by.id('d2Button')).click(); 

    //whatever has to be here for the waiting to occur 

    expect(element(by.binding('rolls.d2')).getText()).not.toEqual('0'); 
}); 

는 HTML입니다 : 여기

내 테스트입니다 서비스 전화는 다음과 같습니다.

function getD2Roll(quantity) { 
    var url = "Dice/D2/" + quantity; 
    return getPromise(url); 
} 

function getPromise(url) { 
    var deferred = $q.defer(); 
    $http.get(url).success(deferred.resolve).error(deferred.reject); 
    return deferred.promise; 
} 

테스트를 올바르게 대기 시키려면 어떻게해야합니까?

+0

각도기의 browser.wait()를 사용해 보았습니다. http://angular.github.io/protractor/#/api?view=webdriver.WebDriver.prototype.wait – Aaron

답변

4

여기에 대한 대답은 버튼을 클릭 한 후 browser.waitForAngular() 기능을 사용하는 것입니다.

app.clickButtonAndWaitForResolution = function (button) { 
    button.click(); 
    browser.waitForAngular(); 
}; 

그런 다음이 함수를 호출하고 클릭하는 버튼 요소로 전달됩니다 Ajax 호출을 발생시키는 버튼을 클릭 할 필요가있는 시험 : I는 다음과 같습니다 사용에 모든 테스트를위한 일반적인 방법을했다.

+0

경고 : "각도기는 모든 WebDriver 작업 전에이 명령을 자동으로 적용합니다." http://angular.github.io/protractor/#/api?view=Protractor.prototype.waitForAngular – dgtc

+0

@dgtc - 그래도 그 전에입니다. 여기서 문제는 webdriver 명령 이후에 일어날 필요가 있다는 것입니다. 특히 실행할 다음 작업이 재스민 어설 션 인 경우 특히 그렇습니다 – cidthecoatrack

관련 문제