0

私のコードには File.expand_path(Rails.root) への複数の呼び出しがあります

テスト用に、仕様/サポートで次の構成を作成しました

RSpec.configure do |config|
  config.before(:each) do
    File.stub(:expand_path).and_return("spec/fs")
  end
end

File.expand_path への各リクエストが「/home/user/」の代わりに「spec/fs/」を返すようにします。

Rails 3にいる間はうまくいきました

ただし、Rails 4 に移行した後、テストは次のエラーをスローし始めました。

 Failure/Error: let(:category) { build(:category) }
 LoadError:
   cannot load such file -- spec/fs

なぜ表示されるのですか / どうすれば修正できますか?

ps。

テスト/モデルは非常に基本的なものですが、奇妙なことに、このテスト ケースは失敗します。

#in class
def first method(category)
  "#{File.expand_path(Rails.root)}/public/collections/#{self.name}/_new/#{category.name.downcase}"
end

#in rspec
describe "#first_method" do
  it { expect(collection.first_method(category)).to be_instance_of(String) }
end

しかし、これはそうではありません!

#in class
def second_method
  "#{File.expand_path(Rails.root)}/public/collections/#{self.name}/_new/"
end

#in rspec
describe "#second_method" do
  it { expect(collection.second_method).to be_instance_of(String) }
end

カテゴリ ファクトリは次のように単純です。

FactoryGirl.define do
  factory :category do
    name "TestCategory"
  end
end

シンプルに構築

let(:category) { build(:category) }

ただし、:category ファクトリの構築中にスタブ障害が発生したようです

4

2 に答える 2

1

File.expand_pathは非常に一般的に使用される方法です。CategoryRails、RSpec、または FactoryGirl ソフトウェアが、double が配置された後に実行されるコードの一部として (たとえば、モデル コードをロードするために) これに依存していたとしても、私は驚かないでしょう。スタック トレースを出力するか、デバッガーが呼び出されたときにデバッガーに移動し、現在の場所を確認することで、簡単に確認できます。

于 2013-10-07T04:03:03.880 に答える