使用Ruby,Cucumber和Aruba检查测试主目录中的文件

时间:2014-04-03 20:05:20

标签: ruby cucumber aruba

我正在使用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并让它扩展到完整路径?

1 个答案:

答案 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目录。