来自ngMockE2E的$ httpbackend从未调用过

时间:2013-06-07 01:11:58

标签: angularjs karma-runner

我正在尝试进行一些无后端的e2e测试,所以我需要嘲笑API调用。 这是我做的:

angular.module('foo.bar.e2eConf', ['foo.bar', 'ngMockE2E']).
  run(function($httpBackend) {
    $httpBackend.whenGET('/foo/bar').respond({foo:'bar'});
  });

然后我像这样配置conf/karma.e2e.conf(pathes没问题):

var basePath = '../';
var files = [
  ANGULAR_SCENARIO,
  ANGULAR_SCENARIO_ADAPTER,
  // bower libs
  'components/angular/index.js',
  'components/jquery/jquery.js',
  'components/angular-resource/index.js',
  'components/angular-mocks/index.js',
  'components/chai/chai.js',
  'test/chai.conf.js',
  'src/app/**/*.js',
  {pattern:'src/app/**/partials/*.tpl.html', included:false},
  'test/e2e/**/*.js'
];
var singleRun = false;
var browsers = ['Chrome'];
var proxies = {'/': 'http://localhost:8000/'};

我可以运行不涉及API调用的测试,但是当我运行涉及它的测试时,我得到了一个很好的Failed to load resource: the server responded with a status of 404 (Not Found) http://localhost:9876/foo/bar

我想我错误配置了一些东西,但我无法弄清楚是什么?

代理和模拟之间是否存在冲突?即代理/foo/barhttp://localhost:8000/foo/bar而不是使用模拟?

有什么想法吗?

此致

1 个答案:

答案 0 :(得分:1)

您需要创建一个应用程序版本,引导foo.bar.e2eConf模块,而不是引导foo.bar模块。

您必须在应用索引页面中包含javascript文件angular-mocks.js和您在上面定义的新模块。

你应该能够通过使用这个新的应用程序并看到它从你的模拟中返回数据来在Karma之外进行测试。

您可能不需要将这些文件的一半添加到Karma配置中。这只是为了在测试场景中添加文件..它将在iframe中加载你的应用程序,你的应用程序负责加载它自己的javascript。

我正在使用php为应用程序的任一版本提供服务,具体取决于我使用的URL:使用api调用的真实版本,或使用模拟的e2e版本。