使用ng-describe和protractor进行端到端测试

10
我最近发现了一个很棒的ng-describe软件包,通过抽象掉加载、注入、模拟或间谍所需记忆、查找和编写的所有样板代码,使得为AngularJS应用程序编写单元测试非常透明。
有人尝试过将ng-describeprotractor一起使用吗?是否有意义,并且我们可以从中受益吗?
其中吸引我眼球的一点是您可以轻松地模拟HTTP响应:
ngDescribe({
  inject: '$http', // for making test calls
  http: {
    get: {
      '/my/url': 42, // status 200, data 42
      '/my/other/url': [202, 42], // status 202, data 42,
      '/my/smart/url': function (method, url, data, headers) {
        return [500, 'something is wrong'];
      } // status 500, data "something is wrong"
    }, 
    post: {
      // same format as GET
    }
  },
  tests: function (deps) {
    it('responds', function (done) {
      deps.$http.get('/my/other/url')
        .then(function (response) {
          // response.status = 202
          // response.data = 42
          done();
        });
      http.flush();
    });
  }
});

模拟HTTP响应通常有助于实现更好的端到端覆盖,并测试UI对特定情况的反应以及错误处理的工作方式。目前我们正在使用protractor-http-mock进行此操作,还有其他选项看起来不像使用ng-describe那样容易。

1个回答

9

Protractor主要用于E2E测试(使用Selenium WebDriver),这意味着您需要连接一个实际的后端(也可以是模拟后端)。正如Protractor的创建者在此处所写(链接),您的应用程序代码与测试代码分别运行,并且无法轻松访问$http服务。

如果模拟后端调用,则即使您使用Protractor等E2E测试工具,也不再执行E2E测试。那为什么不返回进行单元测试呢?唯一的区别将是您将使用jQuery而不是Protractor API,并使用Karma运行测试。然后,您可以轻松使用ng-describe$httpBackend,这些主要用于单元测试。

但是,如果您希望继续使用此方法,可以查看此Protractor问题中的评论。有几个人正在提出此问题的解决方案,就像之前提到的,您已经使用其中之一。但在这种情况下,ng-describe并不能帮助您太多。

希望这回答了您的问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接