diff --git a/resources/NpmDsc/NpmDsc.psm1 b/resources/NpmDsc/NpmDsc.psm1 index 64f7b4bc..a418bf66 100644 --- a/resources/NpmDsc/NpmDsc.psm1 +++ b/resources/NpmDsc/NpmDsc.psm1 @@ -17,8 +17,14 @@ function Invoke-Npm { [Parameter(Mandatory = $true)] [string]$Command ) + $value = Invoke-Expression -Command "npm $Command" - return Invoke-Expression -Command "npm $Command" + if ($LASTEXITCODE -ne 0) { + $errors = Get-NpmErrorMessages -LogPath (GetNpmPath) + throw "Command 'npm $($Command.Trim())' failed: $($errors -join '; ')" + } + + return $value } function Set-PackageDirectory { diff --git a/tests/NpmDsc/NpmDsc.tests.ps1 b/tests/NpmDsc/NpmDsc.tests.ps1 index 3162aeee..0b1472e2 100644 --- a/tests/NpmDsc/NpmDsc.tests.ps1 +++ b/tests/NpmDsc/NpmDsc.tests.ps1 @@ -85,6 +85,10 @@ Describe 'NpmPackage' { $finalState.InDesiredState | Should -Be $true } + It 'Throws if npm returns non-zero exit code' -Skip:(!$IsWindows) { + { Invoke-Npm '!' } | Should -Throw "Command 'npm !' failed:*" + } + It 'Performs whatif operation successfully' -Skip:(!$IsWindows) { $whatIfState = @{ Name = 'react'