Angular e2e测试影响数据库

时间:2013-12-11 12:05:35

标签: angularjs testing webdriver protractor angularjs-e2e

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

1)我们有Angular.js个应用,PHP后端支持MongoDB存储空间。

2)Protractor用于端到端测试。

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

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

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

有什么想法吗?

2 个答案:

答案 0 :(得分:3)

有一种简单的方法可以做到这一点。如果你的应用程序中有一个与你的后端对话的角度服务,你可以从量角器调用它。

以下是一个例子:

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)
  });
});

答案 1 :(得分:1)

我会模拟与您的PHP应用程序的交互。这将允许您将测试与Angular代码隔离开来,并更明确地测试数据中的边缘情况(或服务器端的问题)。 http://docs.angularjs.org/api/ngMockE2E。$ httpBackend

以下是另一个可能对您有所帮助的答案:mock $httpBackend in angular e2e tests