roblox-tsr
roblox-ts10mo ago
133 replies
duck

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;


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 fixLoadModule
image.png
Was this page helpful?