Согласно другому ответу, поле RequiredModules
манифеста модуля определяет любые модули, которые должны быть импортированы в глобальную среду, до импорта этого модуля.
Поэтому эти модули должны быть уже установлены насистемы, но не нужно загружать (импортировать) в текущий сеанс.
В результате, чтобы убедиться, что ваши тесты работают в системе CI, вам необходимо убедиться, что ваш тестовый скрипт выполнил установкуиз необходимых модулей (например, через Install-Module
, если они доступны в PSGallery или другом репозитории nuget).
Если есть возможность протестировать ваш скрипт без зависимого модуля, вы можете написать сценарии Pester, которые работают вокругпроблема путем пересмешивания требуемых функций без необходимости присутствия модуля.Это можно сделать, определив пустые функции для отсутствующих командлетов, а затем (опционально) объявив для них макеты, чтобы можно было проверить, что они были вызваны, как и ожидалось:
. YourModule.psm1
Function Some-Function { }
Mock Some-Function { }
Describe 'Testing Invoke-SomeCmdlet invokes Some-Function as part of its code' {
$Result = Invoke-SomeCmdlet
It 'Should invoke Some-Function' {
Assert-MockCalled Some-Function
}
}
Без объявления командлета какпустой Function
Mock
потерпит неудачу, так как вы можете только смоделировать существующий командлет / функцию.
Обратите внимание, что для того, чтобы протестировать свой код таким образом, вам нужно загрузить код, не вызываяМанифест модуля (например, исходный файл .ps1 или .psm1 file / s напрямую сравнивается с загрузкой модуля через .psd1, в противном случае оператор RequiredModules
вызовет сбой тестового сценария).
Очевидно, что его прощепросто имейте все необходимые модули, но иногда это не всегда возможно, приведенное выше просто для демонстрации того, как можно обойти такой сценарий.