Простой тест Powershell Pester не работает для $ false

Я написал очень простую функцию под названием «Check-RegValueExists», которая работает следующим образом при выполнении непосредственно из командной строки.

Check-RegValueExists "HKLM:\Software\Microsoft\Windows\CurrentVersion" "DevicePath"

Check-RegValueExists "HKLM:\Software\Microsoft\Windows\CurrentVersion" "Devicexxxx"

Check-RegValueExists "HKCU:\Software\Classes\message-facebook-com" "URL Protocol"

который выводит следующие

True
False
False

все это правильные результаты.

Мой тест на приставание

Describe 'Check-RegValueExists Tests'{

It "has valid key with valid value" {
        'Check-RegValueExists "HKLM:\Software\Microsoft\Windows\CurrentVersion" "DevicePath"' | Should Be $true
        } 

It "has invalid key" {
        'Check-RegValueExists "HKLM:\Software\Microsoft\Windows\CurrentVersion" "Devicexxxx"' | Should Be $false
        } 

It "has empty value" {
        'Check-RegValueExists "HKCU:\Software\Classes\message-facebook-com" "URL Protocol"' | Should Be $false
        } 

}

Однако только первый тест проходит, а два других не проходят со следующим

[-] has invalid key 17ms
   Expected: {False}
   But was:  {Check-RegValueExists "HKLM:\Software\Microsoft\Windows\CurrentVersion" "Devicexxxx"}
   8:         'Check-RegValueExists "HKLM:\Software\Microsoft\Windows\CurrentVersion" "Devicexxxx"' | Should Be $false
   at <ScriptBlock>, <No file>: line 8
 [-] has empty value 28ms
   Expected: {False}
   But was:  {Check-RegValueExists "HKCU:\Software\Classes\message-facebook-com" "URL Protocol"}
   12:         'Check-RegValueExists "HKCU:\Software\Classes\message-facebook-com" "URL Protocol"' | Should Be $false
   at <ScriptBlock>, <No file>: line 12

Я даже скопировал и вставил первый тест и изменил только строку для подтверждения, но все еще не работал. Есть ли синтаксическая ошибка или что-то еще?


person user2743945    schedule 01.11.2017    source источник
comment
если я изменю утверждение на Should be $true, тогда тесты пройдут !!! что не имеет логического смысла? $ true - это просто проверка на появление какого-либо значения или успешный запуск функции ???   -  person user2743945    schedule 01.11.2017
comment
На мой ответ, ваша основная проблема в том, что вы заключили свои команды в кавычки, превратив их в строки. Однако было бы полезно, если бы вы также добавили свою Check-RegValueExists функцию в свой вопрос с помощью редактирования, чтобы мы могли видеть, что она делает. Вы должны убедиться, что он возвращает $ true или $ false, а не строки true или false.   -  person Mark Wragg    schedule 01.11.2017


Ответы (1)


Ваша проблема заключается в том, что вы заключили свои команды в одинарные кавычки, что превратило их в строки. В результате вы проверяете, является ли каждая строка $ true или $ false, и любое значение считается $ true.

Вам нужно сделать это:

Describe 'Check-RegValueExists Tests'{

    It "has valid key with valid value" {
        Check-RegValueExists "HKLM:\Software\Microsoft\Windows\CurrentVersion" "DevicePath" | Should Be $true
    } 

    It "has invalid key" {
        Check-RegValueExists "HKLM:\Software\Microsoft\Windows\CurrentVersion" "Devicexxxx" | Should Be $false
    } 

    It "has empty value" {
        Check-RegValueExists "HKCU:\Software\Classes\message-facebook-com" "URL Protocol" | Should Be $false
    } 
}
person Mark Wragg    schedule 01.11.2017
comment
OMG, вау, каким толстым я мог быть, ваше стопроцентное право, спасибо. Я следил за учебником, и они, казалось, делали все в кавычках, а затем, когда я пробовал что-то для себя, я просто следовал соглашению. Чувак, я чувствую себя глупо. - person user2743945; 03.11.2017
comment
Также вы можете использовать | Should -BeTrue или | Should -BeFalse. - person fourpastmidnight; 02.11.2018