62 lines
1.4 KiB
Lua
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
|