在circleCI中,超过1个rspec测试给出了bundler:无法加载命令:rspec

时间:2017-10-13 12:02:57

标签: ruby rspec circleci

如何使用圆圈CI运行多个rspec测试文件?

当我在spec / features / main中进行一次测试时,它运行正常。

但是,如果我有另一个规格,它们会在本地传递但在circleCI中我会得到

bundler: failed to load command: rspec (/home/circleci/repo/vendor/bundle/ruby/2.4.0/bin/rspec)

即使我使用“在ci规范中工作”并将其复制为不同的文件名但保持内容相同,也会发生这种情况。当我这样做时,它在circleCI中失败并带有上述消息

我测试的所有内容都表明问题与多个文件有关,而不是上面测试显示的实际内容。

文件的顶部(如果只有文件,则有效)是:

require 'yaml'
require 'spec_helper'
require_relative '../../support/page_object'
require_relative '../../support/sleep_lengths'
require_relative '../../support/sleepers'

我的require_relative在某种程度上弄乱了第二个文件吗?

Circle使用以下命令查找文件:

#!/bin/bash -eo pipefail
mkdir /tmp/test-results
TEST_FILES="$(circleci tests glob "spec/**/*_spec.rb" | circleci tests split --split-by=timings)"

bundle exec rspec --format progress \
            --out /tmp/test-results/rspec.xml \
            --format progress \
            "${TEST_FILES}"

1 个答案:

答案 0 :(得分:1)

这里可能会发生两(2)件事情:

  1. “$ {TEST_FILES}”没有给出正确的替换,因此使整个bundle exec rspec命令失败。您可以在bundle exec rspec命令

    中没有引号的情况下直接尝试使用它
    $(circleci tests glob "spec/**/*_spec.rb" | circleci tests split --split-by=timings)
    
  2. 如果尚未运行任何成功的测试套件,按时间分割可能会有问题。以下是我从circle ci docs中提取的内容:

  3.   

    时间分割类型使用历史时序数据来加权   分裂。 CircleCI自动生成之前的定时数据   在默认位置的容器内可用的成功运行   所以CLI工具可以发现它们   ($ CIRCLE_INTERNAL_TASK_DATA /圆测试结果)。

    所以也许你应该尝试按文件名分割,这是默认的或任何其他更明确的选项,如filesize而不是时间。这样的事情可能会有所帮助:

    TEST_FILES="$(circleci tests glob "spec/**/*_spec.rb" | circleci tests split)"