Powershell не удается найти тип [Pester.OutputTypes] в VSCode Linux.OutputTypes] в VSCode Linux

#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 или нет.