Методы проверки в существующем файле 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 поддерживает автоматическое восстановление среды. Ищите "изолировать" в документации.