从let加载不同的文件

时间:2018-01-19 08:48:15

标签: ruby rspec

有没有办法在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})) }

你能提出一些解决方案吗?

2 个答案:

答案 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