Методы проверки в существующем файле lua во время тестов Busted

Я хочу написать модульные тесты для существующего файла lua, используя Busted. Я хочу поменять местами некоторые методы во время теста, чтобы файл запускался не с реальными методами, а с методами mocked/stubbed (в противном случае он не будет работать). Некоторые из методов, которые вызываются из файлов, извлекаются из других библиотек lua, и я хотел бы посмеяться над ними.

Как этого достичь?

Любая помощь приветствуется, спасибо.

1 ответ

Я не думаю, что вы можете легко заменить локальные функции, но это просто заменить экспортируемые или глобальные функции.

Например, мне нужно было смоделировать HTTP-вызов через http:new().request(...) от rest.http библиотека. Вот что я сделал в своем тесте:

local http = require 'resty.http'
http.new = function()
  return {
    request = function(self, args)
      -- ... some mock implementation
    end
  }
end

Этот подход должен работать для любой экспортируемой функции. Например, чтобы заменить функцию foo из библиотеки bar,

local bar = require 'bar'
bar.foo = myMockImpl

Изменение глобальных функций или переменных может быть достигнуто путем перезаписи _Gнапример, это изменит глобальную функцию или переменную foo:

_G.foo = ...

Busted поддерживает автоматическое восстановление среды. Ищите "изолировать" в документации.

Другие вопросы по тегам