Как тестировать модули nodejs, которые транзитивно требуют себя - PullRequest
0 голосов
/ 22 марта 2019

Предположим следующий сценарий:

Клиент Rest - это модуль, который имеет множество промежуточных программ; которые сами являются модулями.

Теперь мы пытаемся создать новое промежуточное ПО, которое требует от самого клиента извлечения / обновления метаданных для входного URL-адреса клиента.

Тестирование этого промежуточного программного обеспечения приведет к публикации опубликованной версии клиента из реестра npm, поскольку промежуточное программное обеспечение имеет devDependency на клиенте. Но мы хотим обслужить нашего местного клиента.

Кроме того, опубликованная версия клиента не содержит этого нового промежуточного программного обеспечения, поэтому оно не позволит протестировать конвейер запросов с этим промежуточным программным обеспечением.

Мы хотим запустить клиент с помощью этого промежуточного программного обеспечения, когда мы тестируем само промежуточное программное обеспечение для отправки запроса на выборку данных.

Промежуточное программное обеспечение достаточно умен, чтобы не запрашивать метаданные для метаданных, поэтому оно пропустит второй вызов. Новый поток должен быть похож на диаграмму ниже:

New request flow should be like this

1 Ответ

0 голосов
/ 22 марта 2019

Оберните загрузчик модуля nodejs, чтобы вернуть локальный клиент вместо опубликованного, когда клиент запрашивается во время выполнения теста.

describe(()=>{
  const localClient = require('../client');
  const m = require('module');
  const orig = m._load;

  before(()=>{
    m._load = function(name){
      if(name==='client'){
        return localClient;
      }
      return orig.appy(this, arguments)
    }
  });

  after(()=>{
    m._load = orig;
  });

  it('test goes here',()=>{...})
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...