使用shared_exapmles_for时,guard无法找到更新的示例

时间:2015-01-13 02:34:31

标签: ruby-on-rails ruby rspec

为了整理代码,我将RSpec方法的concerns测试分隔到spec/concerns目录。

我跟着this answer。 (从答案中复制和粘贴)

# app/models/concerns/personable.rb

module Personable
  extend ActiveSupport::Concern

  def full_name
    "#{first_name} #{last_name}"
  end
end

# spec/concerns/personable_spec.rb

require 'spec_helper'

shared_examples_for "personable" do
  let(:model) { described_class } # the class that includes the concern

  it "has a full name" do
    person = FactoryGirl.create(model.to_s.underscore.to_sym, first_name: "Stewart", last_name: "Home")
    expect(person.full_name).to eq("Stewart Home")
  end
end

# spec/models/master_spec.rb

require 'spec_helper'

describe Master do
  it_behaves_like "personable"
end

# spec/models/apprentice_spec.rb

require 'spec_helper'

describe Apprentice do
  it_behaves_like "personable"
end

当我编辑personable_spec.rb后,检测到更新,但由于文件中没有示例,因此会以No examples found结束。

我必须运行所有规范来测试personable_spec.rb。有没有办法自动测试shared_examples_for方法中定义的示例?

1 个答案:

答案 0 :(得分:0)

这就是你要做的事情:

1 - 请勿使用后缀_spec命名您的共享示例文件,它们不是spec文件,而是支持文件。我还建议将它们分组到名为support的子文件夹中,以便更好地进行文件组织。

请将您的文件spec/concerns/personable_spec.rb移至spec/support/concerns/personable.rb,甚至spec/support/shared_examples/concerns/personable.rb,或者您认为合适的内容。

2 - 从支持文件中删除行require 'spec_helper',此require语句仅在规范文件中需要,而不在支持文件中

3 - 通过在support文件末尾添加,告诉rspec加载spec_helper.rb下的所有文件:

# Load custom matchers and macros, etc
Dir[Rails.root.join('spec/support/**/*.rb')].each { |f| require f }

4 - 重启警卫并运行测试。

5 - 您还需要告诉警卫在support文件夹和子文件夹下的所有文件中查找更改,这样您就不必每次都重新启动变化