0

私は次のような電話をかけることに慣れています:

new_count.should eql(10)

変数についてですが、次のようなクラスメソッドで同様のことを行うにはどうすればよいFile.directory?(my_path)ですか?

RubyFile.should be_directory(my_path)は File.

私はそれをひっくり返して書くことができることを知っています

File.directory?(my_path).should == true

しかし、それが失敗したときのメッセージは非常に貧弱です。

何か案は?

4

2 に答える 2

0

うーん、多分私はアイデアを持っています。

Fileは Ruby 固有の一部であるため、C で記述された要素が含まれている可能性があります。Ruby のメタプログラミング ツールの一部は、C からインポートされたクラスを処理するときに機能しなくなります。これは、Rspec が.should期待どおりに動作しないことを説明している可能性があります。

それが本当なら、ここに本当の解決策はありません。MockFS ライブラリを使用することをお勧めします。

MockFS のこの欠点は、通常 File、Dir、および FileUtils を使用するすべての場所で MockFS を使用することです。

require 'mockfs'

def move_log
  MockFS.file_utils.mv( '/var/log/httpd/access_log', '/home/francis/logs/' )
end

特にコードがファイル集約型の場合の利点は、非常に複雑なシナリオを特定し、実際に遅いファイルシステムに触れることなく実行できることです。すべては記憶の中で起こります。より速く、より完全な仕様。

これが役に立てば幸いです、頑張ってください!

于 2009-08-07T12:14:52.840 に答える
0

なぜうまくいかないbe_directoryのかわかりません。どのバージョンの rspec を使用していますか? predicate_matchers述語が存在する場合、rspec のメソッドを使用することもできますが、 be_predicate.

これが私が試したことです:

describe File, "looking for a directory" do

  it "should be directory" do
    File.should be_directory("foo")
  end

  predicate_matchers[:find_the_directory_named] = :directory?
  it "should find directory" do
    File.should find_the_directory_named("foo")
  end

end

そして、それは私に次の出力を与えました(で実行spec -fs spec.rb):

File looking for a directory
- should be directory
- should find directory

Finished in 0.004895 seconds

2 examples, 0 failures
于 2009-08-07T14:30:32.503 に答える