1

我有一些 jasmine 单元测试,它们是“集成测试”,它们锻炼了一些编写为角度服务的核心组件。但是我的组件不会调用网络。我证明问题的两个测试是这样的......

[顺便说一句,我有一个禁用 CORS 的插件]

  it('test http get', function () {

    httpGet('http://endpoint.json');

    function httpGet(theUrl) {
      var xmlHttp = null;

      xmlHttp = new XMLHttpRequest();
      xmlHttp.open("GET", theUrl, false);
      xmlHttp.send(null);
      return xmlHttp.responseText;
    }

  })

  it('test angular http get', inject(function($http) {

    $http.get('http://endpoint.json').
      success(function (data, status, headers, config) {

        console.log('success');

      }).
      error(function (data, status, headers, config) {

        console.log('failure');

      });

  }));

我知道这是因为 $httpBackend 模拟。但是我需要使用真正的实现。我想使用 jasmine 的异步功能来等待响应或超时,但我只是无法弄清楚如何让 Angular 真正进行调用。

在其他新的 jQuery 调用中工作正常!:-)

4

1 回答 1

0

$httpBackend仅演示请求,旨在节省您的时间。

为什么?

假设您想测试您的函数是否正常工作,但该函数取决于从服务器检索到的数据。

它不是测试数据的真实性和需要一些时间的 $http.get 方法,而是测试函数的真实性,确保你的函数正在做它应该做的事情。

现在,为了创建异步调用,您可以与 $timeout 或 $interval 服务集成,

或者

使用 Protractor:e2e - 端到端测试工具,“作为用户”测试您的应用程序,它能够测试 DOM 元素中值的真实性,例如:

单击<button id="a"></button>-> 验证其<p id="b">值为hello world

量角器

于 2014-11-08T15:51:51.290 回答