我有一个Protractor测试,输入登录数据并单击登录按钮,我希望检查Angular变量的值。
单击元素的ng-click是doLogin(),它在控制器文件中定义为:
$scope.doLogin = function(){
console.log('login -- todo');
// remember email used
localStorageService.add('lastKeyEmail', $scope.data.login.key.email);
// todo - make dynamic
$scope.authentication.user = true;
// set email of logged in user
// todo: would need to be done in user service (set user details received from server)
Authentication.setEmail($scope.data.login.key.email);
// overwrite password in memory
$scope.data.login.password = "thispasswordisdeletedsoyoucantreadit";
};
如何在$ scope.authentication.user的值上使用Protractor的expect()?
答案 0 :(得分:6)
有一个名为evaluate
的函数允许您评估给定元素的角度表达式。
选择要检查范围的DOM元素,然后调用evaluate。文档中有一个例子:
http://angular.github.io/protractor/#/api?view=ElementArrayFinder.prototype.evaluate
答案 1 :(得分:4)
使用量角器,您可以执行端到端测试(例如,如果您是用户点击界面 - 按钮,锚点 - 并阅读呈现的内容 - 您决定最终公开到视图),您无权访问控制器中封装的JavaScript变量。
您正在讨论的测试类型是单元测试,您只需要通过注入填充了正确数据的$ scope对象来测试doLogin
函数,然后断言它与您完全一样通过测试js变量来预期。
虽然,如果$scope.authentication.user
在设置为true
时修改了视图(就像显示“身份验证成功”,或者甚至路由到其他视图),您可以使用量角器断言这种行为是通过(在触发登录后检查DOM中的“Authentication successfull”消息) - 但请记住,这仍然是e2e测试。