Files
2026-07-13 12:32:21 +08:00

62 lines
1.4 KiB
Lua

local mocker = {}
-- Setup mocks, which are undone in a finally() block
-- @param finally The `finally` function, that needs to be passed in because
-- Busted generates it dynamically.
-- @param args A table containing three optional fields:
-- * modules: an array of pairs (module name, module content).
-- This allows modules to be declared in order.
-- * kong: a mock of the kong global (which will fallback to the default one
-- via metatable)
-- * ngx: a mock of the ngx global (which will fallback to the default one
-- via metatable)
function mocker.setup(finally, args)
local mocked_modules = {}
local _ngx = _G.ngx
local _kong = _G.kong
local function mock_module(name, tbl)
local old_module = require(name)
mocked_modules[name] = true
package.loaded[name] = setmetatable(tbl or {}, {
__index = old_module,
})
end
if args.ngx then
_G.ngx = setmetatable(args.ngx, { __index = _ngx })
end
if args.kong then
_G.kong = setmetatable(args.kong, { __index = _kong })
end
if args.modules then
for _, pair in ipairs(args.modules) do
mock_module(pair[1], pair[2])
end
end
finally(function()
_G.ngx = _ngx
_G.kong = _kong
for k in pairs(mocked_modules) do
package.loaded[k] = nil
end
end)
end
function mocker.table_where_every_key_returns(value)
return setmetatable({}, {
__index = function()
return value
end
})
end
return mocker