What is everyone’s approach to testing a script (i.e. a self-contained ps1 that contains parameters, functions, and code)? Rather than a module that contains a function per file.
Unfortunately, there is no good way to do it. Pester loves functions and if your code is broken up into functions, it makes your code not only cleaner but easier to test.
Before you spend too much time trying to get this to work I’d first look to see if you can split out that script into multiple functions and then write tests for those.
I’ve gone with the UnderTest switch for now. Problem is it’s not my code and I’m fine with recommending it gets re-factored, but hoped there might now be an easier way to extract a function (for example).
Thanks for reminding me of that article, I think you could solve that problem by building the whole script from smaller files before publishing. That way, during development you can test it as usual, and then on build we could have file-based-mock function that either uses the real file, or injects it’s own definition. That would allow you to create version of the whole file that would be disconnected from the real architecture. Maybe we could leverage AST for that somehow, or template file where we know where to inject our functions.
The whole problem pretty much is that in real script our mocked functions get shadowed by functions defined by the script, so we need a way to inspect the functions your script defines, generate mocks for them (if any mocks are specified), injects the mocks in the file, and then run.