Mocking `loadstring` doesn't work with ui labs with the global mock loadstring
//test.story.ts
import fixLoadModule from "common/shared/utils/fix-load-module";
import { runTests } from "common/shared/utils/run-tests";
import { FunctionStory } from "@rbxts/ui-labs";
fixLoadModule();
export = (() => {
runTests();
return () => {};
}) satisfies FunctionStory;//test.story.ts
import fixLoadModule from "common/shared/utils/fix-load-module";
import { runTests } from "common/shared/utils/run-tests";
import { FunctionStory } from "@rbxts/ui-labs";
fixLoadModule();
export = (() => {
runTests();
return () => {};
}) satisfies FunctionStory;function fixLoadModule()
local fenv = getfenv()
local metaenv = getmetatable(fenv)
local original = loadstring
metaenv.__index.loadstring = function(str, ...)
local virtual = table.pack(original(str, ...))
setfenv(
virtual[1],
setmetatable(
{
_G = fenv._G,
require = fenv.require,
script = str,
} :: any,
metaenv
)
)
return unpack(virtual)
end
end
return fixLoadModulefunction fixLoadModule()
local fenv = getfenv()
local metaenv = getmetatable(fenv)
local original = loadstring
metaenv.__index.loadstring = function(str, ...)
local virtual = table.pack(original(str, ...))
setfenv(
virtual[1],
setmetatable(
{
_G = fenv._G,
require = fenv.require,
script = str,
} :: any,
metaenv
)
)
return unpack(virtual)
end
end
return fixLoadModule
