ruby 我可以在Rails RSpec中传递一个块给it_behaviors_like吗?

cnjp1d6j  于 2023-08-04  发布在  Ruby
关注(0)|答案(1)|浏览(94)

假设我有一个共同的例子:

shared_examples 'success' do
  let(:params) { key: "value" }

  it "returns data" do 
    post "/api/users", params: params

    expect(response.status).to eq (201)
  end
end

字符串
当我在it_behaves_like中使用这个共享示例时,我可以向它传递一个块来扩展预期的列表吗?
例如,我这样写:

it_behaves_like "success" do 
    expect(response['id]).to eq(1)
  end


希望rspec能像这样编译它:

it "returns data" do 
    post "/api/users", params: params

    expect(response.status).to eq (201)
    expect(response['id]).to eq(1)
  end


上面的代码显然没有像我想要的那样工作,但我想知道如何编写它,以便RSpec可以像我上面预期的结果那样理解它。有可能吗?

bfnvny8b

bfnvny8b1#

您可以将其分为执行API请求的shared context和检查状态代码的shared example,例如:

shared_context 'request' do
  before do
    post '/api/users', params: params
  end
end

shared_examples 'success' do
  it 'returns with 201 status code' do
    expect(response.status).to eq (201)
  end
end

字符串
然后可以将这些组合起来:

describe 'a successful request' do
  include_context 'request' do
    let(:params) { { key: 'value' } }
  end

  it_behaves_like 'success'

  it 'returns data' do
    expect(response['id']).to eq(1)
  end
end

相关问题