是否可以使用Protractor测试未绑定到DOM的变量的值?

时间:2014-12-31 22:55:29

标签: angularjs testing protractor

我对Angular和新的(今天)对Protractor相对较新,所以我不确定如何提出这个问题 - 因此我不太确定那里是否有重复。下面是我们正在开发的更大,更复杂的应用程序的非常简化版本,但基本思想是相同的。

假设我有一个简单的网页:

<input id="my-input" ng-model="myValue">
<button id="submit-button" ng-click="doSomething()">
    Click Me
</button>

由简化的角度应用控制:

// some-angular-app.js

$scope.myValue = "";
$scope.computedValue = null;

$scope.doSomething = function() {
    $scope.computedValue = "Hello World";
}

基本上,当您单击按钮时,它会触发一个操作应用程序中变量的函数。在我们的例子中(如上所述),变量(即$scope.computedValue)没有以任何方式绑定到DOM - 它们实际上被编译并传递给我们的API使用的JSON请求。但是,我想测试这些值 - 例如:

// some-protractor-test.js

describe('form submission', function() {
    it('should corretly set the computed value', function() {
        browser.get('http://our.awesome-web.page');
        element(by.css("#my-input")).sendKeys("Hello Input");
        element(by.css("#submit-button")).click();

        // ??? how to check that computedValue === "Hello World" ???
    });
});

可以使用Protractor以这种方式检查数据的状态,还是必须通过DOM元素处理与Angular应用程序的所有交互?

2 个答案:

答案 0 :(得分:5)

我认为您需要检查服务,指令或控制器的单元测试。考虑一下您在浏览器中打开应用程序的真实用户protractor端到端测试,点击一些按钮并观察一些数据 - 黑盒方法,而不是潜入技术细节,全部通过量角器 - 浏览器交互完成。 protractor旨在自动化伪造真实用户的浏览器操作 - 保持在更高级别。

答案 1 :(得分:0)

您还可以使用evaluate()来检索模型值:

groupCode.evaluate('groupCode').then(function(value) {
    console.log(value);
});