我对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应用程序的所有交互?
答案 0 :(得分:5)
我认为您需要检查服务,指令或控制器的单元测试。考虑一下您在浏览器中打开应用程序的真实用户的protractor
端到端测试,点击一些按钮并观察一些数据 - 黑盒方法,而不是潜入技术细节,全部通过量角器 - 浏览器交互完成。 protractor
旨在自动化伪造真实用户的浏览器操作 - 保持在更高级别。
答案 1 :(得分:0)
您还可以使用evaluate()来检索模型值:
groupCode.evaluate('groupCode').then(function(value) {
console.log(value);
});