gpt4 book ai didi

ruby - 如何在共享上下文之间共享 RSpec let 变量?

转载 作者:太空宇宙 更新时间:2023-11-03 18:08:29 24 4
gpt4 key购买 nike

我正在尝试通过使用共享上下文来 DRY 我的 RSpec 请求规范。我想在共享上下文之间共享 let 变量,以便它们相互继承和扩展。

Rspec.shared_context 'JSON request' do
let(:headers) do
{
'Accept' => 'application/json'
}
end
end

Rspec.shared_context 'Authenticated request' do
let(:headers) do
super().merge('Authorization' => "Bearer #{token}")
end
end

Rspec.describe 'user management' do
let(:token) { create(:oauth_token) }

include_context 'JSON request'
include_context 'Authenticated request'

it 'responds with a 200 ok' do
get '/user', headers: headers
expect(response).to have_http_status(:ok)
end
end

声明 token 按预期工作,但使用 super() 覆盖 headers 返回 NoMethodError 提示 super() 为 nil。

最佳答案

我不知道有什么方法可以在 let block 中引用 let 变量的当前定义值。 (当我尝试它时,我得到“堆栈级别太深”。)我会做你想做的事情:

Rspec.shared_context 'JSON request' do
let(:common_headers) do
{
'Accept' => 'application/json'
}
end
let(:headers) { common_headers }
end

Rspec.shared_context 'Authenticated request' do
let(:headers) do
common_headers.merge('Authorization' => "Bearer #{token}")
end
end

关于ruby - 如何在共享上下文之间共享 RSpec let 变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39120840/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com