使用Protractor访问JS范围元素/变量

时间:2014-12-23 20:49:08

标签: javascript angularjs protractor

我有一个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()?

2 个答案:

答案 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测试。