Какой-нибудь динамический c способ использовать выражение "using" в PowerShell? - PullRequest
1 голос
/ 17 марта 2020

У меня проблемы с оператором using, который можно увидеть здесь . Этот оператор (в отличие от Import-Module) необходим для получения фактического определения класса из модуля PowerShell. У меня есть вариант использования для этого, потому что мне нужно само определение класса для модульного тестирования Пестера.

Проблема в том, что я не могу найти способ динамически указать путь к модулю. Я не могу использовать переменные, такие как $PSScriptPath в пути. Я могу предоставить только абсолютный или относительный путь. Ни один из них действительно не работает для меня.

  • Абсолютный путь: Проблема здесь в том, что модульные тесты будут выполняться на разных машинах (серверах сборки). Следовательно, иметь жестко запрограммированный абсолютный путь от компьютера разработчика не представляется возможным.
  • Относительный путь: Это также проблематично c, поскольку модульные тесты запускаются из базового каталога, который затем запустите все тестовые файлы рекурсивно. Поэтому мне нужно было бы Set-Location указать каталоги c для каждого теста, чтобы относительные пути работали. Чтобы протестировать десятки модулей, это большая нагрузка, которую мне приходится решать, когда я могу просто запустить все свои модульные тесты без этой хлопоты.

Есть ли лучший способ, которым я могу управлять этим ? Общая структура каталогов выглядит следующим образом ...

src
   project1
      someModule1
         someModule1.psm1
      someModule2
         someModule2.psm1
      someModule3
         someModule3.psm1
      tests
         someModule1.Tests.ps1
         someModule2.Tests.ps1
         someModule3.Tests.ps1

Из каталога src, запустите Invoke-Pester -Script ., чтобы запустить все файлы модульных тестов. Файлы «Тесты» должны иметь возможность импортировать классы из соответствующих модулей. Хуже того, я не получаю никаких ошибок, когда оператор using не находит путь к модулю, если я не запускаю оператор using интерактивно в консоли. Есть идеи?

1 Ответ

0 голосов
/ 17 марта 2020

Правильно ли установлены модули в пути PSmodule?

Установлены ли модули. Если это так, вы можете получить путь к ним, запросив:

(Get-Module -Name someModulex -ListAvailable).ModuleBase
...