2012-03-12 5 views
3

私は、File::ShareDir::Installを使用してdistディレクトリに共有ファイルをインストールするモジュールを作成しています。モジュールのエクスポートされたメイン関数内で、ファイルはFile::ShareDirを使用して配置されます。File :: ShareDirを使用するモジュールをテストするにはどうすればよいですか?

この関数は、共有ファイルを読み込み、ファイル内の文字列を検索します。私のテストの1つでは、関数がいくつかの入力に対して正しい値を返したかどうかをチェックしたかったのです。だから、テストは次のようになります。

my @cases = (
    [ 'input1' => 'expected1' ], 
    # etc 
); 

for my $case (@cases) { 
    my ($input, $expected) = @$case; 
    is(
     my_lookup_function($input), 
     $expected, 
     "$input => $expected", 
    ); 
} 

しかし、テストは

my $dir = dist_dir('My-Dist'); 

croaksので、実行されません。

私のMakefile.PLは、blibの下にある共有ファイルを見つけることができるので正しいと思われます。私はテスト中にこのディレクトリを見つけるために私のモジュールでFile::ShareDir::dist_dir呼び出しを得るために何が必要なのか分かりません。

私はTest::File::ShareDirを見ましたが、私がやろうとしていることをするために使用できるかどうかは分かりません。

あなたはどのように現在の設定で必要な動作を実現するために私に言うか、私のためにおそらく正しく;-)

答えて

2

作品を違ったことをやって(との方法を提案することができますいずれかの場合、私はそれをお願い申し上げます。

perl Makefile.PL ; make 
make test 
prove -b 

$ tree 
. 
├── Makefile.PL 
├── share 
│ └── quux 
└── t 
    └── foo.t 

2 directories, 3 files 

$ cat Makefile.PL 
use ExtUtils::MakeMaker; 
use File::ShareDir::Install; 

install_share 'share'; 
WriteMakefile; 

package MY; 
use File::ShareDir::Install qw(postamble); 


$ cat t/foo.t 
use File::ShareDir qw(dist_dir); 
use Test::More; 

diag dist_dir('My-Dist'); 

pass; 
done_testing; 
+0

Ooooopsss:ドキュメントから

!あなたが正しい。実際に私を顔で見つめていたテストファイルには別の問題がありました。私はあなたの答えを読んで、私の焦点をシフトするまで気づかなかった。ありがとうございました。 –

1

あなたはどこSHAREDIRファイルを検索するためにあなたのテストを伝えるためにモジュールTest::File::ShareDirを使用することができます。

use Test::More; 

# use FindBin; optional 

use Test::File::ShareDir 
    # -root => "$FindBin::Bin/../" # optional, 
    -share => { 
     -module => { 'My::Module' => 'share/MyModule' } 
     -dist => { 'My-Dist' => 'share/somefolder' } 
    }; 

use My::Module; 

use File::ShareDir qw(module_dir dist_dir); 

module_dir('My::Module') # dir with files from $dist/share/MyModule 

dist_dir('My-Dist') # dir with files from $dist/share/somefolder 
関連する問題