2017-12-15 6 views
0

PowerShellスクリプトCommon.ps1の一部の機能に対して、Pesterを使用してPowerShellテストスクリプトCommon.tests.ps1を作成しました。同じディレクトリにもTestInitializer.ps1スクリプトがあり、Microsoft.Xrm.Data.PowerShellモジュールを使用してダイナミックCRMインスタンスにレコードを作成して取得します。Visual StudioでPesterテストを実行しているときにPowerShellモジュールを読み込めません

のVisual StudioからPowerShellのテストスクリプトを実行すると、テストは、メッセージとともにテストExplorerで失敗:

CommandNotFoundException:モジュールのMicrosoft.Xrm.Data.PowerShell」はロードできませんでした。詳細については、「Import-Module Microsoft.Xrm.Data.PowerShell」を実行してください。

PowerShell ISEから実行した場合と同じテストが問題なく実行されます。これは、モジュールがVisual Studioで実行されているようにインスタンス用にインストールされていないかのように見えます(Get-Module -ListAvailableを実行したときにこれを確認し、出力にVisual StudioテストのMicrosoft.Xrm.Data.PowerShellモジュールが含まれていないことを確認しました)。 : Import-Module Microsoft.Xrm.Data.PowerShell -Global -Force Visual Studioでのスクリプト実行中にモジュールをロードしていないようです。ここで

Common.test.ps1です:TestInitializer.ps1から

$here = (Split-Path -Parent $MyInvocation.MyCommand.Path) 
. $here\Common.ps1 
. $here\TestInitializer.ps1 

Describe "SelectionToSingleCharString" { 
Context "StringTransforms" { 
    It "Retrieves a CRM record and uses the optionset value to retrieve a single character" { 
    SelectionToSingleCharString($crmRecord.new_type) | Should Be "I" 
     } 
    } 
} 

スニペット:

# Whether or not this is uncommented does not matter 
#Import-Module "$env:SystemRoot\System32\WindowsPowerShell\v1.0\Modules\Microsoft.Xrm.Data.PowerShell\Microsoft.Xrm.Data.PowerShell.psd1" -Global -Force 


#$modules = Get-Module -ListAvailable 
#Write-Host $modules 

# Failing here 
Microsoft.Xrm.Data.PowerShell\Connect-CrmOnPremDiscovery -ServerUrl $loginServerUrl -OrganizationName $loginOrgName -Credential $cred 

読み込むことができないのに、私が代わりに、レコードを読み取る\代わりに、実際に作成しようとしたのモックを使用するようにテストを設計することができます外部モジュールとVisual Studioで実行すると制限されます。

答えて

0

モジュールは、ディレクトリ(あなたが実際の問題に興味がある場合は、これをスキップ)インストールについて:

まずあなたが$PSHome\Modules (%Windir%\System32\WindowsPowerShell\v1.0\Modules)にモジュールをインストールすることはありませんが。このフォルダは、Windowsのみが出荷されるモジュール用に予約されています。

あなたは常に次のパスの下でのみ、ご利用者が使用し、あなたのモジュールをインストールする必要があります下

$Home\Documents\WindowsPowerShell\Modules 

そして、システム全体のインストールのために:PowerShellでモジュールを取り付けるに関する

$Env:ProgramFiles\WindowsPowerShell\Modules 

深い読みにMSDNにあります。

は、Visual Studioの何のバージョンを使用している:あなたの実際の問題について

? VS 2017 Community Editionがインストールされていて、エラーを再現できません。私のPowerShellは、64ビットプロセスとしても動作しています。 PowerShellは32ビットプロセスとして実行できます。 32ビットPowershellの場合、モジュールディレクトリは異なります。これは、インストールしたモジュールがVisual Studioに表示されない理由を説明します。

あなたのPowerShellは、次のコマンドを使用して64ビットプロセスで実行されている場合は、確認することができます。

PS> [Environment]::Is64BitProcess 
True 

次のパスの下にそれらをインストールする必要があり、32ビットのPowerShellのためのあなたのモジュールにアクセスできるようにするには

{$Env:ProgramFiles(x86)}\WindowsPowerShell\Modules 
+0

これはVisual Studio 2015にあり、テストが32ビットプロセスで実行されているようです。 Windows PowerShell(x86)環境で 'Install-Module Microsoft.Xrm.Data.PowerShell'を実行し、テストを再実行すると成功しました。 –

関連する問題