我正在编写一个与测试过程集成的Ruby Gem,我希望编写集成测试,证明它可以按照我预期的端到端工作。我包含一个使用Gem的简单应用程序(TestApp)。
我的gem包含一个spec
文件夹,以及其根目录中的测试应用程序。测试应用程序将其测试包含在features
文件夹中。 (当然还有其他的东西)。
my_gem
|
- spec
- test_app
|
- features
在添加新测试之前,如果我在my_gem
目录并执行bundle exec rspec
,我对my_gem
的测试将按预期执行。如果我执行:
cd test_app
bundle exec features
我对test_app
的测试按预期执行。现在,如果我将my_gem
测试添加到测试中:
describe "Test test suite"
it "executes as expected"
`bundle exec test_app/features`
end
end
并在my_gem
中执行测试我得到以下内容:
C:/RailsInstaller/Ruby2.0.0/lib/ruby/gems/2.0.0/gems/tzinfo-1.2.2/lib/tzinfo/data_source.rb:182:in `rescue in create_default_data_source': No source of timezone data could be found. (TZInfo::DataSourceNotFound)
Please refer to http://tzinfo.github.io/datasourcenotfound for help resolving this error.
from C:/RailsInstaller/Ruby2.0.0/lib/ruby/gems/2.0.0/gems/tzinfo-1.2.2/lib/tzinfo/data_source.rb:179:in `create_default_data_source'
...
按照建议网址上的说明引导我向我的宝石添加依赖项,这是我不会要求的,并且不想强迫宝石的最终用户依赖。
除了上述内容外,我还尝试过:
exec('bundle exec rspec test_app/features')
和
Dir.chdir('test_app') do
`bundle exec rspec features`
end
但每次我都得到同样的错误。有趣的是,当我从控制台中的bundle exec rspec test_app/features
目录执行my_gem
时,没有额外的测试,我得到相同的错误,但是当我执行没有bundle exec
的命令时却没有。在测试中删除bundle exec
没有任何区别。
导致这些错误的原因是什么?我可以在我的test_app
测试中执行my_gem
测试套件,以免导致错误?
答案 0 :(得分:0)
我在这里找到了一个解决方案:http://makandracards.com/makandra/15649-how-to-discard-a-surrounding-bundler-environment
事实证明,测试是在我当前的环境下执行的(其他人可能能够更好地解释这一点)。解决方案是使用Bundler.with_clean_env
:
Bundler.with_clean_env do
Dir.chdir('test_app') do
`bundle exec rspec features`
end
end