Использование ng-описания для сквозного тестирования с помощью транспортира

Недавно я обнаружил удивительный ng-describe пакет, который делает записи модульных тестов для приложений AngularJS очень прозрачными, абстрагируя все код шаблона, который вы должны помнить/искать и писать, чтобы загружать, вводить, издеваться или шпионить.

Кто-нибудь пытался использовать ng-describe с protractor? Имеет ли это смысл и мы можем извлечь из этого выгоду?


Одна из вещей, которые привлекли мое внимание, заключается в том, насколько легко вы можете издеваться над 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-ответов обычно помогает достичь лучшего покрытия e2e и тестировать, как UI реагирует на конкретные ситуации и как работает обработка ошибок. Это то, что мы сейчас делаем с protractor-http-mock, есть и другие опции, которые выглядят не так просто, как с ng-describe.

Ответ 1

Первичный трактор предназначен для тестирования E2E (с помощью селенового webdriver), а это означает, что вам нужно подключить фактический бэкэнд (это может быть и макетный бэкэнд). Поскольку создатель Protractor написал здесь, ваш код приложения запускается отдельно с тестовым кодом, и невозможно получить легкий доступ к $http оказание услуг.

Издеваясь над обратными вызовами, вы больше не выполняете тестирование E2E, даже если вы используете инструмент для тестов E2E, таких как Protractor. Почему бы не вернуться к тестированию модулей. Единственное различие заключается в том, что вы будете использовать jQuery вместо API-интерфейса Protractor API, и тесты будут выполняться с помощью Karma. Затем вы можете легко использовать ng-describe и $httpBackend, которые предназначены для использования в модульных тестах.

Однако, если вы хотите продолжить этот подход, вы можете проверить комментарии в этой проблеме Protractor. Есть несколько парней, которые предлагают решения для этой проблемы, и, как уже упоминалось, вы уже используете один из них. Но в этом случае ng-describe не поможет вам.

Я надеюсь, что это ответит на ваш вопрос.