angularjs - 影响数据库的 Angular e2e 测试

标签 angularjs testing webdriver protractor angularjs-e2e

这是我的问题,逐步解决 :)) 我认为这样读起来更好,不像一堵可怜的文字墙试图解释我的特定领域问题。

1) 我们有一个 Angular.js 应用程序,它带有 PHP 后端,支持 MongoDB 存储。

2) Protractor 用于端到端测试。

3) 需要测试改变数据库的页面,即注册场景 - 我正在测试中完成所有注册步骤,因此数据库获得了新的用户记录。

4) 可以预见的是,测试在运行后会失败,因为数据库有测试用户的记录并且不需要注册 - 用户被重定向到主页。

我正在考虑为 node.js 获取一个 mongodb 包,并在测试中与数据库交互。
但这似乎不对:数据库连接的配置文件位于后端的 php 文件中,而我正在尝试为我们应用程序的纯前端部分编写测试。

有什么想法吗?

最佳答案

有一个简单的方法可以做到这一点。如果您的应用程序中有与后端对话的 angular.service ,您可以从 Protractor 调用它。

这是一个例子:

https://github.com/andresdominguez/protractor-meetup/blob/master/test/e2e/api-helper.js

function createObject(data) {
  return browser.executeAsyncScript(function(data, callback) {
    var api = angular.injector(['ProtractorMeetupApp']).get('apiService');
    api.member.save(data, function(newItem) {
      callback(newItem._id);
    });
  }, data);
}

此代码将被序列化并在浏览器上执行。我在 ProtractorMeetupApp 模块中有一个名为 apiService 的服务。 api服务可以创建、更新等。

你的测试看起来像这样:

https://github.com/andresdominguez/protractor-meetup/blob/master/test/e2e/member3-spec.js

it('should call api', function() {
  // Create a new member.
  createObject({name: 'test member'}).then(function(id) {
    console.log(id)
  });
});

关于angularjs - 影响数据库的 Angular e2e 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20518687/

相关文章:

javascript - WebDriverJs 的资源?

Javascript/Angular : Bind function to every object or make helper object?

html - 使用 ng-src 时如何在 Angular 指令中访问 src 属性

javascript - AngularJS 的面向对象方法

javascript - Bootstrap 切换复选框在 ng-view 中不起作用

php - Selenium 测试中的变量

javascript - selenium.common.exceptions.WebDriverException : Message: unknown error: arguments[0].点击不是Selenium Python中使用execute_script()的函数

python - Testbed 中的数据存储 key 不正确

testing - Jasmine .andCallFake 不触发 spineJs 的函数调用

javascript - 在python中使用selenium执行javascript console.log的确切方法