我正在使用Cucumber和Aruba来测试在GLI之上编写的Ruby命令行应用程序。为了防止测试影响生产数据,我更新ENV['HOME']
以指向测试目录。我想检查测试ENV['HOME']
目录中是否存在文件。我想使用Aruba,但我无法让ENV['HOME']
正确扩展。
例如:
Scenario: Testing config files are found
Given I switch ENV['HOME'] to be "set_a" of test_arena
Then a file named "#{ENV['HOME']}/config.xml" should exist
是否可以将ENV ['HOME']传递给Aruba的Then a file named "" should exist
step_definition并让它扩展到完整路径?
答案 0 :(得分:2)
我仍然有兴趣看看是否有可能与Cucumber / Aruba一起做这个。与此同时,这里是我正在做的一个减少的例子:
在features/app_name.feature
文件中,定义以下方案:
Scenario: Testing config files are found
Given I switch ENV['HOME'] to be "test_arenas/set_a"
Then a test_arena file named "config.xml" should exist
然后,在features/step_definitions/app_name.rb
文件中定义步骤:
Given(/^I switch ENV\['HOME'\] to be "(.*?)"$/) do |testing_dir|
ENV['HOME'] = File.join(File.expand_path(File.dirname(__FILE__)),
'..','..', testing_dir)
end
Then(/^a test_arena file named "(.*?)" should exist$/) do |file_name|
file_path = "#{ENV['HOME']}/#{file_name}"
expect(File.exists?(file_path)).to be_truthy
end
这在Aruba的check_file_presence
中并不那么强大,但它完成了基本的工作。
对于更多背景知识,这种方法背后的想法是在应用程序的目录结构的根目录中放置一个test_arenas
目录。对于每个测试,将创建一个包含必要文件的单个test_arenas/set_X
目录。在每次测试之前,ENV ['HOME']指向相应的test_arenas/set_X
目录。