使用 shared_exapmles_for 时守卫找不到更新的示例
guard can't find updated examples when using shared_exapmles_for
为了整理代码,我将 concerns
方法的 RSpec
测试分开到 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- 不要使用后缀 _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- 告诉 rspec 通过在 spec_helper.rb
文件末尾添加以下内容来加载 support
下的所有文件:
# Load custom matchers and macros, etc
Dir[Rails.root.join('spec/support/**/*.rb')].each { |f| require f }
4- 重启 guard 并 运行 你的测试。
5- 你还需要告诉守卫在 support
文件夹和子文件夹下的所有文件中寻找变化,所以你不会有为每次更改重新启动守卫
为了整理代码,我将 concerns
方法的 RSpec
测试分开到 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- 不要使用后缀 _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- 告诉 rspec 通过在 spec_helper.rb
文件末尾添加以下内容来加载 support
下的所有文件:
# Load custom matchers and macros, etc
Dir[Rails.root.join('spec/support/**/*.rb')].each { |f| require f }
4- 重启 guard 并 运行 你的测试。
5- 你还需要告诉守卫在 support
文件夹和子文件夹下的所有文件中寻找变化,所以你不会有为每次更改重新启动守卫