如何在另一个应用程序的测试套件中的一个应用程序中执行RSpec测试套件?

时间:2015-01-12 01:33:07

标签: ruby-on-rails testing rspec

我正在编写一个与测试过程集成的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测试套件,以免导致错误?

1 个答案:

答案 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