有没有办法在Ruby let定义中加载作为参数传递的不同文件?这是我在rspec中加载文件的代码:
let(:xml_file) { File.read(File.join('spec', 'fixtures', 'xml', 'example1.xml')) }
我需要这样的东西:
let(:xml_file) { File.read(File.join('spec', 'fixtures', 'xml', #{file})) }
你能提出一些解决方案吗?
答案 0 :(得分:2)
只需将文件名设为变量,并根据describe / context
定义它let(:xml_file) { File.read(File.join('spec', 'fixtures', 'xml', file_name)) }
context '1' do
let(:file_name) { 'foobar_1.xml' }
it 'test sth' do
xml_file # should be spec/fixtures/xml/foobar_1.xml
end
end
context '2' do
let(:file_name) { 'foobar_2.xml' }
it 'test sth' do
xml_file # should be spec/fixtures/xml/foobar_2.xml
end
end
答案 1 :(得分:0)
如果您需要在每个测试中使用特定文件,则可以在每个上下文或描述部分定义另一个let
:
let(:xml_file) { File.read(File.join('spec', 'fixtures', 'xml', file))}
describe "first set of tests" do
let(:file) { "file_1.txt" }
end
describe "second set of tests" do
let(:file) { "file_2.txt" }
end