我试图通过使用共享上下文来干我的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()
为零。
答案 0 :(得分:3)
我不知道如何在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
变量值。 (当我尝试它时,我得到"堆叠水平太深"。)我做你正在尝试这样做的事情:
{“readyState”:0,“responseText”:“”,“status”:0,“statusText”:“error”}
答案 1 :(得分:0)
您可以使用super()
来获取预定义的let
的值:
RSpec.shared_context 'common' do
let(:foo) { 'foo' }
end
RSpec.describe 'test' do
include_context 'common'
context 'reversed' do
let(:foo) { super().reverse }
it 'works' do
expect(foo).to eq('oof')
end
end
end