我正在使用在Linux Mint上使用Visual Studio Code的powershell port of Lesspass

到目前为止,测试在IDE上运行良好。

从VSCode

现在,当我在测试文件上并按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.


来自makefile

但是,使用make test运行测试时,它可以工作。任务是:

.PHONY: test
test:
    pwsh -Command 'Invoke-Pester -EnableExit (Get-childItem -Recurse *.tests.ps1).fullname'

最佳答案

我认为您的问题很可能是您试图自己调用杵测试脚本而不是通过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> Invoke-Pester-脚本C:\ Tests -Tag UnitTest,最新-ExcludeTag错误
  
  此命令在C:\ Tests及其子目录中运行* .Tests.ps1文件。在那些
      文件,它将仅运行具有UnitTest或Newest标签的测试,除非该测试
      也有一个Bug标签。


因此,根据您的情况,将make调用更改为
pwsh -Command 'Invoke-Pester -EnableExit

假设构建系统会将当前工作目录设置为项目的根文件夹。

09-19 11:57