$httpbackend из ngMockE2E никогда не вызывался

Я пытаюсь сделать некоторые бэкэнд-тесты e2e, поэтому мне нужно издеваться над вызовами API. Вот что я сделал:

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

Затем я настроил свой conf/karma.e2e.conf следующим образом (пути в порядке):

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/bar в http://localhost:8000/foo/bar вместо использования макета?

Есть идеи?

С уважением

Ксавье


person xavier.seignard    schedule 07.06.2013    source источник


Ответы (1)


Вам нужно создать версию вашего приложения, которая загружается из модуля foo.bar.e2eConf, а не из модуля foo.bar.

Вам нужно будет включить файлы javascript angular-mocks.js и новый модуль, который вы определили выше, на странице индекса вашего приложения.

Вы должны иметь возможность проверить это вне Кармы, просто используя это новое приложение и увидев, что оно возвращает данные из ваших макетов.

Вероятно, вам не нужно добавлять половину этих файлов в конфигурацию Karma. Это просто для добавления файлов в сценарий тестирования. Ваше приложение будет загружаться в iframe, и ваше приложение отвечает за загрузку собственного javascript.

Я использую php для сервера любой версии приложения в зависимости от того, какой URL-адрес я использую: либо реальную версию, которая использует вызовы API, либо версию e2e, которая использует макеты.

person Karen Zilles    schedule 07.06.2013
comment
привет, спасибо, так что мне просто нужно изменить на angular.module('foo.bar', ['ngMockE2E']).run(...) и включить его в index.html? (плюс необходимые депсы) - person xavier.seignard; 08.06.2013
comment
спасибо, с вашим комментарием я понял, что я сделал минимальный проект с тестированием e2e с помощью ngMockE2E::$httpBackend: github. com/xseignard/e2eMock Мне все еще нужно условно поместить тестовые сценарии в html, есть идеи, как этого добиться? или более чистый способ с angular.bootstrap? см.: github.com/xseignard/e2eMock/blob/master/ источник/index.html#L18 - person xavier.seignard; 08.06.2013
comment
я планирую использовать это для условного импорта: заголовок =" заставить grunt генерировать индексный html для разных настроек"> stackoverflow.com/questions/12401998/ - person xavier.seignard; 08.06.2013
comment
Это должно сработать. Я обслуживаю свое угловое приложение из php, поэтому у меня есть код условия. - person Karen Zilles; 08.06.2013