我在TeamCity构建环境中测试命令行gem时遇到了一些麻烦。
我正在使用gem来构建各种类型的清单文件elf_manifesto。它从命令行运行,我用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中的构建参数中,但到目前为止还没有运气。
有没有人有任何指针?
提前致谢。
答案 0 :(得分:1)
根据我的经验,Aruba不会将bin/
中的宝石添加到路径中。即使在基于UNIX的项目中,我也必须自己完成:
在env.rb
:
PROJECT_ROOT = File.join(File.dirname(__FILE__),'..','..')
ENV['PATH'] = "#{File.join(PROJECT_ROOT,'bin')}#{File::PATH_SEPARATOR}#{ENV['PATH']}"
话虽这么说,我从未让Aruba像在UNIX上一样在Windows上工作。
为了帮助诊断,请使用功能上的@announce
标记(这会导致打印stderr和stdout),甚至可能会在自定义步骤中删除自己的日志语句。
答案 1 :(得分:0)
在Windows中,仅当具有.COM
,.EXE
(和其他)等扩展名的文件可执行时才会生效。
您可以将manifesto
更改为ruby 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)
希望有所帮助
答案 2 :(得分:0)
您应该知道Aruba运行它测试的应用程序并在其自己的工作目录(awd)中创建所有本地输出。 awd默认为tmp / aruba,在每个场景开始时由Aruba清除并创建。但是,最后一个场景创建的内容将留在awd中供您检查。
Aruba会在每个Cucumber场景的持续时间内自动将项目的bin目录添加到PATH环境变量中。
您可以在项目根目录下创建bin
目录,然后将二进制文件复制到那里
您可以使用aruba-jbb,它提供@no-aruba-tmpdir
标记来处理此案例。