Rspec:一种将 let 助手包含到不同规范中的方法

Dre*_*ker 2 ruby rspec ruby-on-rails

let并let!提供有用的功能。有时可能需要在不同的规范中包含相同的助手(DRY)。例如,一组 let 以某种方式包含在每个请求规范中。有办法做这样的事情吗?

Ste*_*fan 6

您可以定义一个shared_context:

# shared_stuff.rb
shared_context "shared stuff" do
  let(:shared_let) { "foo" }
end
Run Code Online (Sandbox Code Playgroud)

并在各种示例中使用它:

# example.rb
require_relative "shared_stuff.rb"

describe "an example" do
  include_context "shared stuff"

  it "has access to shared lets" do
    expect(shared_let).to eq("foo")
  end
end
Run Code Online (Sandbox Code Playgroud)

输出:

$ rspec example.rb                                                                                              
an example
  has access to shared lets

Finished in 0.00076 seconds (files took 0.11233 seconds to load)
1 example, 0 failures
Run Code Online (Sandbox Code Playgroud)