Powershell在VSCode Linux上找不到类型[Pester.OutputTypes]

时间:2019-04-17 07:24:02

标签: linux powershell visual-studio-code pester

我正在使用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'

1 个答案:

答案 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

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