#linux #powershell #visual-studio-code #pester
#linux #powershell #visual-studio-code #приставать
Вопрос:
Я работаю над портом Lesspass для powershell, используя Visual Studio Code в 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 commanu2026Pester 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. У Pester вообще есть типы? Если он использует систему классов powershell, вам нужно сделать
using module
Ответ №1:
Я думаю, что ваша проблема, скорее всего, заключается в том, что вы пытаетесь вызвать тестовый скрипт pester самостоятельно, а не через Invoke-Pester
команду.
Я думаю, что если вы измените свой вызов на Invoke-Pester -Script ~/projects/Lesspass/Lesspass/src/Password.tests.ps1
свою ошибку, она может исчезнуть.
Причина в том, что файлы *.tests.ps1 сами по себе не знают, как настроить все фоновые настройки, необходимые для обработки тестового запуска. Invoke-Pester
выполняет множество настроек перед запуском тестовых файлов, а прямой вызов тестового скрипта F5
пропускает эту настройку.
Если вы хотите иметь возможность нажимать F5
, чтобы начать тестовый запуск, то, что многие разработчики делают в 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 -Тег UnitTest, новейший -Ошибка ExcludeTag
Эта команда запускает файлы *.Tests.ps1 в C:Tests и его подкаталоги. В этих файлах он запускает только тесты с тегами UnitTest или Newest, если только в тесте также нет тега ошибки.
Так что в вашем случае, вероятно, было бы проще и чище изменить ваш make
вызов на pwsh -Command 'Invoke-Pester -EnableExit
Это предполагает, что ваша система сборки установит текущий рабочий каталог в корневую папку вашего проекта.
Комментарии:
1. Вероятно, вам просто нужно перезапустить vscode, что, безусловно, устранило мою проблему, когда я столкнулся с точно такой же ошибкой. Хотя Invoke-Pester выполняет некоторые задачи очистки перед запуском тестов, все, что он действительно делает, это запускает . Тестирует файлы .ps1. Describe, it, context и т. Д. — Это Просто функции модуля Pester, Которые отлично работают независимо от того, запускаются с помощью Invoke Pester или нет.