2

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

4

1 回答 1

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

于 2014-04-03T20:53:12.007 回答