3

我在 TeamCity 构建环境中测试命令行 gem 时遇到了一些问题。

我正在研究用于构建各种类型的清单文件elf_manifesto的 gem 。它从命令行运行,我已经成功地用 Cucumber 和非常有用的Aruba gem测试了它。在本地,我正在使用 RVM、ruby 1.9.2 开发 Lion MBP。一切都很好。

将构建过程移动到工作中的 TeamCity 环境时出现了问题。TeamCity 代理在 windows 盒子上运行,问题似乎是当从 Aruba 触发命令行可执行文件时,在 windows 盒子的路径环境中找不到脚本。这是构建日志中的 Cucumber 输出片段。

[13:46:37]: [Scenario: Start manifesto with no parameters] When  I run `manifesto`
[13:46:37]: [When  I run `manifesto`] ChildProcess::LaunchError: The system cannot find the    file specified. (2)

Aruba gem 旨在在运行测试时将可执行文件(位于 bin 目录中)添加到路径中。这在我的本地设置上运行良好,但在 Windows 上失败。我尝试将 RUBYPATH 环境变量添加到 TeamCity 的构建参数中,但到目前为止还没有运气。

有没有人有任何指示?

提前致谢。

4

3 回答 3

1

根据我的经验,Aruba 不会将您的 gem from 添加bin/到路径中。即使在基于 UNIX 的项目中,我也必须自己动手:

env.rb

PROJECT_ROOT = File.join(File.dirname(__FILE__),'..','..')
ENV['PATH'] = "#{File.join(PROJECT_ROOT,'bin')}#{File::PATH_SEPARATOR}#{ENV['PATH']}"

话虽如此,我从来没有让 Aruba 在 Windows 上像在 UNIX 上那样工作。

为了帮助诊断,请使用@announce您的功能上的标签(这会导致打印 stderr 和 stdout),甚至可能在您的自定义步骤中放入您自己的日志语句。

于 2012-01-23T14:40:36.693 回答
0

在 Windows 中,只有具有某些扩展名(如.COM,.EXE和其他)的文件是可执行的。

您可以使用正确的路径更改manifestoruby manifesto喜欢manifesto,它应该可以在 Windows 上运行。

如果您还想在 Unix 平台上工作,您需要support\env.rb像下面这样更改为 Aruba

require 'aruba/cucumber'
module ArubaOverrides
  def detect_ruby(cmd)
    processor, platform, *rest = RUBY_PLATFORM.split("-")
    #puts platform
    if platform =~ /w32$/ && cmd =~ /^manifesto /
      "ruby -I../../lib -S ../../bin/#{cmd}"
    else
      "#{cmd}"
    end
  end
end

World(ArubaOverrides)

希望能帮助到你

于 2012-03-12T13:57:44.257 回答
0

您应该知道 Aruba 运行它测试的应用程序并在其自己的工作目录 (awd) 中创建所有本地输出。awd 默认为 tmp/aruba,并在每个场景开始时由 Aruba 清除和创建。但是,最后一个场景创建的内容会留在 awd 中供您检查。

解决方案#1

在每个 Cucumber 场景执行期间,Aruba 会自动将项目的 bin 目录添加到 PATH 环境变量中。

您可以在项目根目录下创建一个bin目录,然后将二进制文件复制到那里

解决方案#2

您可以使用aruba-jbb,它提供了一个@no-aruba-tmpdir标签来处理这种情况。

于 2014-08-06T18:41:36.413 回答