为了整理代码,我将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
方法中定义的示例?
答案 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
文件夹和子文件夹下的所有文件中查找更改,这样您就不必每次都重新启动变化