在 RSPEC 中存根 JSON.parse
Stub JSON.parse in RSPEC
我正在这里做一些 RSPEC 测试。
如果我有这个方法:
JSON.parse("https://test.com/return_json/reviews.json")
然后我可以将它存根 RSPEC 如:
test_reviews = {"reviews" => [{"data1" => "1", "data2"=> "2"}]}
allow(JSON).to receive(:parse).and_return(test_reviews.to_json)
但是对于这种(里面有其他方法(to_uri
& read
))。
JSON.parse("https://test.com/return_json/reviews.json".to_uri.read)
我尝试使用 receive_message_chain
但没有成功。
提前谢谢大家!
您的代码实际上并未调用 url 您。您需要进行 http 调用并解析正文。我大概应该是这个样子。
describe :ReviewsController
let(:uri) { URI('https://test.com/return_json/reviews.json') }
let(:reviews) { {"reviews" => [{"data1" => "1", "data2"=> "2"}]} }
before do
stub_request(:get, uri).
with(headers: {'Accept'=>'*/*', 'User-Agent'=>'Ruby'}).
to_return(status: 200, body: JSON.dump(reviews), headers: {})
end
it 'does whatever you want' do
response = Net::HTTP.get(uri)
expect(JSON.parse(response.body)['data1']).to eq('1') # or whatever you want to test
end
end
最好解释一下here。
我正在这里做一些 RSPEC 测试。
如果我有这个方法:
JSON.parse("https://test.com/return_json/reviews.json")
然后我可以将它存根 RSPEC 如:
test_reviews = {"reviews" => [{"data1" => "1", "data2"=> "2"}]}
allow(JSON).to receive(:parse).and_return(test_reviews.to_json)
但是对于这种(里面有其他方法(to_uri
& read
))。
JSON.parse("https://test.com/return_json/reviews.json".to_uri.read)
我尝试使用 receive_message_chain
但没有成功。
提前谢谢大家!
您的代码实际上并未调用 url 您。您需要进行 http 调用并解析正文。我大概应该是这个样子。
describe :ReviewsController
let(:uri) { URI('https://test.com/return_json/reviews.json') }
let(:reviews) { {"reviews" => [{"data1" => "1", "data2"=> "2"}]} }
before do
stub_request(:get, uri).
with(headers: {'Accept'=>'*/*', 'User-Agent'=>'Ruby'}).
to_return(status: 200, body: JSON.dump(reviews), headers: {})
end
it 'does whatever you want' do
response = Net::HTTP.get(uri)
expect(JSON.parse(response.body)['data1']).to eq('1') # or whatever you want to test
end
end
最好解释一下here。