Параметр чувствительности к регистру для -FileContentMatchMultiline Pester в PowerShell - PullRequest
1 голос
/ 17 июня 2020

У меня есть около дюжины строк, которые должны быть согласованы в нескольких файлах .ps1. Мне удалось заставить это работать с помощью функции -FileContentMatchMultiline в Pester, но мне нужно, чтобы совпадение было чувствительным к регистру. Есть ли какой-нибудь простой способ сделать это?

Вот что у меня есть сейчас:

It "Has all the lines below, but case sensitive" {
        Get-ChildItem $directoryOfFilesToCheck | ForEach-Object {
            $matchstring = @'
$var1 = Line one blah blah blah
$var2 = Line two blah blah blah 
$var3 = Line three blah blah blah
'@
            $_ | Should -FileContentMatchMultiline $([regex]::escape($matchString))
        }

    }

Проблема в том, что он также будет соответствовать, если файлы содержат:

$var1 = Line one BLAH Blah blAH
$var2 = Line two BLAH Blah blAH 
$var3 = Line three BLAH Blah blAH

Это важно, потому что в файле есть вызовы функций, которые чувствительны к регистру, потому что они используются программой, запускающей сценарий.

1 Ответ

1 голос
/ 17 июня 2020

К сожалению, кажется, что у Pester нет утверждения FileContentMatchExactlyMultiline в данный момент, но, глядя на то, как работает FileContentMatchMultiline, получается следующее:

$succeeded = [bool] ((& $SafeCommands['Get-Content'] $ActualValue -Delimiter ([char]0)) -match $ExpectedContent)

Так что, похоже, вы могли бы просто свернуть свой собственный эквивалент этого, сделав это в качестве обходного пути:

Describe 'MyTests' {

    It "Has all the lines below, but case sensitive" {

        $matchstring = @'
$var1 = Line one blah blah blah
$var2 = Line two blah blah blah 
$var3 = Line three blah blah blah
'@

        Get-ChildItem $directoryOfFilesToCheck | ForEach-Object {       
            $ActualValue = (Get-Content $_.FullName -Delimiter [char]0)
            $ActualValue -cmatch $([regex]::escape($matchstring)) | Should -Be $True
        }
    }
}

Это просто переключает -match на -cmatch, что делает его чувствительным к регистру.

Другой вариант - использовать -MatchExactly assertion, поместив содержимое файла в $ActualValue, как указано выше:

$ActualValue | Should -MatchExactly $([regex]::escape($matchstring))

Отправка утверждения FileContentMatchExactlyMultiline в Pester не похоже на то, что это будет так много работы на основе вышеизложенного. Здесь стоит добавить проблему: https://github.com/pester/Pester/issues

...