chai-http не всегда видит заголовок ETag, возможно из-за CORS? - PullRequest
0 голосов
/ 24 марта 2020

Я написал набор тестов, использующих mocha (6.2.2), chai (4.2.0) и chai-http (4.3.0) для тестирования написанного нами микро-сервиса. Иногда заголовок ETag, который мы добавляем сами (сначала удаляя заголовок 'Express' с помощью прослушивателя on-headers), не появляется в ответе, полученном на вызов chai.request. Наблюдения:

  • если тесты выполняются на том же хосте, что и микросервис, полученные ответы ВСЕГДА будут иметь требуемый заголовок ETag;
  • , если тесты выполняются на другом на хосте микро-службы полученный ответ будет ИНОГДА иметь заголовок ETag;
  • тесты, которые не пройдены из-за отсутствия заголовков ETag, всегда одинаковы (даже если код в значительной степени одинаков);
  • Удар по конечным точкам REST микро-сервиса с помощью POSTMAN ВСЕГДА правильно возвращает ответ с заголовком ETag;

Из наблюдений я вполне уверен, что наш микро-сервис в порядке.

С здесь ,

Примечание. При работе в веб-браузере политика одного и того же происхождения позволяет Chai HTTP читать только определенные заголовки, что может привести к утверждению сбой.

(Хотя мы не работаем в браузере, я думаю, что принцип все еще действует). Я попытался добавить заголовок access-control-expose-headers к ответу микросервиса (который включает etag), но это не решает проблему.

Я предполагаю, что это проблема CORS другие возможности: chai-http не нравится значение etag; пример отсутствующего etag:

166-Kd4TGzdykcFKsmm2U4aTYxewdzA

Однако добавление произвольных заголовков, таких как 'Blah' с этим значением, всегда приводит к присутствию заголовка ...

Ответы включают следующее Заголовки CORS:

{
   "server":"openresty/1.15.8.2",
   "date":"Tue, 24 Mar 2020 13:21:37 GMT",
   "content-type":"application/json; charset=utf-8",
   "transfer-encoding":"chunked",
   "connection":"close",
   "vary":"Accept-Encoding",
   "strict-transport-security":"max-age=15724800; includeSubDomains",
   "x-powered-by":"Express",
   "access-control-allow-origin":"*",
   "access-control-expose-headers":"ETag,.....",
   "access-control-allow-credentials":"true",
   "access-control-allow-methods":"PUT, GET, POST, OPTIONS, DELETE",
   "content-encoding":"gzip"
}

(я также пытался добавить заголовки access-control-allow-headers, но, похоже, они установлены неправильно: хотя я не думаю, что они актуальны здесь).

Мне было бы интересно, если кто-нибудь сталкивался с подобными проблемами с chai-http / ETag / CORS и придумал решение ??

Майк Бил

...