假设您有一个具有以下目录结构的Rails 4应用程序:
my_app
my_app/spec
my_app/spec/models/foo_spec.rb
my_app/spec/support/utilities.rb
my_app/spec/test_files/bar.txt
我在my_app/spec/support/utilities.rb
文件中有一个函数,它从my_app/spec/test_files/bar.txt
读取数据,在测试模型之前用一些记录填充测试数据库。
my_app/spec/support/utilities.rb
包含
this_path = File.expand_path(File.dirname(__FILE__))
fname = File.join(this_path, '../test_files/bar.txt')
File.open(fname, 'r').each_line do |line|
# create entries in Foo from tab delimited data
end
这适用于打开my_app/spec/test_files/bar.txt
,但我想知道是否有更好的方法来指定我要打开的文件所在的位置。
答案 0 :(得分:1)
关于阅读文件,请参阅此问题:"require File.dirname(__FILE__)" -- how to safely undo filesystem dependency?
然而,看到你的用例我有一些建议可能会让事情变得更容易。
如果在测试模型之前使用记录填充测试数据库,则可以使用Fixtures而不是原始文本数据更轻松地完成此操作。我建议看一下Ruby on Rails中的Fixtures。利用夹具(以下http://guides.rubyonrails.org/testing.html中的示例)将允许您在运行测试之前加载特定数据。您还可以在测试之前使用FactoryGirl和序列来生成数据。我在下面有各自的例子。
# in spec/spec_helper.rb or spec/<model_spec> using FactoryGirl
before(:each) do
(0..100).each do { |n| create(:user, id: 1 + n) }
end
# in spec/spec_helper.rb
before(:all) do
fixtures :users
end
# in spec/fixtures/users.yml
david:
name: David Heinemeier Hansson
birthday: 1979-10-15
profession: Systems development
steve:
name: Steve Ross Kellock
birthday: 1974-09-27
profession: guy with keyboard