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

Tah*_*aus 5 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";
    };
Run Code Online (Sandbox Code Playgroud)

如何在$ scope.authentication.user的值上使用Protractor的expect()?

And*_*s D 6

有一个函数调用evaluate,允许您评估给定元素的角度表达式.

选择要检查范围的DOM元素,然后调用evaluate.文档中有一个例子:

http://angular.github.io/protractor/#/api?view=ElementArrayFinder.prototype.evaluate


top*_*man 5

使用量角器,您可以执行端到端测试(例如,如果您是用户单击界面 - 按钮、锚点 - 并阅读呈现的内容 - 您决定最终向视图公开的内容),您无权访问到封装在控制器中的 JavaScript 变量。

您正在谈论的测试类型是单元测试,您只测试您的doLogin函数,方法是注入一个填充了正确数据的 $scope 对象,然后通过测试 js 变量断言它完全符合您的预期。

虽然,如果$scope.authentication.user在设置为时修改视图true(例如,如果您显示“身份验证成功”,甚至路由到其他视图),您可以使用量角器断言此行为已通过(通过检查 DOM 中的“身份验证成功”消息触发登录后) - 但请记住,这仍然是 e2e 测试。

  • 现在告诉我您将如何端到端测试在用户单击并拖动画布后某些内容是否移动到画布上的正确位置?我能想象的唯一方法是查看范围内的位置变量。请不要假设您知道所有必要/有效的用例。 (9认同)