我正在使用Linux Mint上的Visual Studio Code开发powershell port of Lesspass。
到目前为止,测试在IDE上运行良好。
现在,当我在测试文件上并按 F5 运行测试时,我得到了:
PS ~/projects/Lesspass/Lesspass> ~/projects/Lesspass/Lesspass/src/Password.tests.ps1
Unable to find type [Pester.OutputTypes].
At ~/.local/share/powershell/Modules/Pester/4.6.0/Functions/PesterState.ps1:8 char:9
+ [Pester.OutputTypes]$Show = 'All',
+ ~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (Pester.OutputTypes:TypeName) [], RuntimeException
+ FullyQualifiedErrorId : TypeNotFound
The Describe command may only be used from a Pester test script.
At ~/.local/share/powershell/Modules/Pester/4.6.0/Functions/Describe.ps1:234 char:9
+ throw "The $CommandName command may only be used from a Peste ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : OperationStopped: (The Describe comman\u2026Pester test script.:String) [], RuntimeException
+ FullyQualifiedErrorId : The Describe command may only be used from a Pester test script.
但是,当使用make test
运行测试时,它可以工作。任务是:
.PHONY: test
test:
pwsh -Command 'Invoke-Pester -EnableExit (Get-childItem -Recurse *.tests.ps1).fullname'
答案 0 :(得分:0)
我认为您的问题很可能是您试图独自调用而不是通过Invoke-Pester
命令的杵测试脚本的事实。
我认为,如果您将呼叫更改为Invoke-Pester -Script ~/projects/Lesspass/Lesspass/src/Password.tests.ps1
,则错误可能会消失。
原因是* .tests.ps1文件本身并不知道如何设置处理测试运行所需的所有后台管道。 Invoke-Pester
在运行测试文件之前做了很多设置,直接用F5
调用测试脚本会跳过该设置。
如果您希望能够按F5
开始测试运行,那么许多PowerShellers在VSCode中所做的就是在本地系统上创建一个debug_entry.ps1
文件,并将该命令放入Invoke-Pester -Script ~/projects/Lesspass/Lesspass/src/Password.tests.ps1
。然后,当您要开始运行时,将选项卡切换到debug_entry.ps1
文件并点击F5
,调试脚本将为您进行正确的调用。这样做还有一个好处,那就是您应该同时遵守在测试文件或正在测试的代码中设置的任何调试断点。
我还认为我还应该指出,在您的make test
脚本中,您正在使用Get-ChildItem
来明确地手动获取所有测试文件路径并将其传递给Invoke-Pester
。这不是必需的。默认情况下,Invoke-Pester
始终将搜索您当前的工作目录或您递归给它的任何路径以查找所有可用的测试文件。
例如来自Get-Help Invoke-Pester
输出的以下代码段
默认情况下,Invoke-Pester运行当前目录中的所有* .Tests.ps1文件 和所有子目录递归。您可以使用其参数选择测试 通过文件名,测试名称或标签。
Get-Help Invoke-Pester -Examples
输出中的这段代码演示了Invoke-Pester
能够搜索给定目录的子目录,而不必搜索当前工作目录来运行测试
--------------------------示例11 ------------------- -------
PS>调用Pester-脚本C:\ Tests -Tag UnitTest,最新-ExcludeTag Bug
此命令在C:\ Tests及其子目录中运行* .Tests.ps1文件。在那些 文件,它将仅运行具有UnitTest或Newest标签的测试,除非该测试 也有一个Bug标签。
因此,根据您的情况,将make
调用更改为
pwsh -Command 'Invoke-Pester -EnableExit
假设您的构建系统会将当前工作目录设置为项目的根文件夹。