Powershell Невозможно найти тип [Pester.OutputTypes] в VSCode Linux - PullRequest
0 голосов
/ 17 апреля 2019

Я работаю над портом PowerShell Lesspass с использованием кода Visual Studio на Linux Mint.

На сегодняшний день тестирование работало из среды 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 голосов
/ 19 апреля 2019

Я думаю, что ваша проблема, скорее всего, связана с тем, что вы пытаетесь вызвать сценарий тестирования приставки самостоятельно, а не через команду 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 -Script C: \ Tests -Tag UnitTest, Newest -ExcludeTag Bug

Эта команда запускает файлы * .Tests.ps1 в C: \ Tests и его подкаталогах.В этих файлах он запускает только те тесты, в которых есть теги UnitTest или Newest, кроме случаев, когда в тесте также есть тег Bug.

Так что в вашем случае, вероятно, будет проще и чище изменить ваш makeвызов pwsh -Command 'Invoke-Pester -EnableExit

Это предполагает, что ваша система сборки установит текущий рабочий каталог в корневую папку вашего проекта.

...