我在代码中有多次调用File.expand_path(Rails.root)
用于测试我在spec / support
中创建了以下配置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 /”
当我在轨道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 factory
时,似乎发生了存根故障答案 0 :(得分:1)
File.expand_path
是一种非常常用的方法。如果Rails,RSpec或FactoryGirl软件依赖它作为代码的一部分,我会不会感到惊讶,这些代码在双精度到位后执行(例如加载Category
模型代码)。您可以通过打印堆栈跟踪或在调用它并查看它所在位置时调试器来轻松验证。
答案 1 :(得分:0)
修复了将File.expand_path(Rails.root)定义为应用程序范围的环境相关常量,并将其修改为测试环境。