我在SO上看过类似的帖子,但他们的建议都没有成功。我想要测试的是以下方法是否记录了弃用警告,但是,我在使其正常工作方面遇到了很多麻烦。 make_request
是同一个类(Client)中的另一个方法。
方法:
def get_person(pop_id, person_id)
path = 'path_url'
data_hash = make_request(path, person_id: person_id, pop_id: pop_id)
Rails.logger.warn '#get_person is deprecated.'
Service::Person.deserialize(data_hash)
end
测试代码:
...
context 'when making a request'
include_context 'making a GET'
describe '#get_person' do
let(:client) { described_class.new }
let(:path) { 'some/path' }
let(:person_id) { 'person-1' }
let(:pop_id) { 'population-1' }
it_behaves_like 'a client'
context 'when the service request returns' do
let(:mock_response) { {} }
before do
allow(client).to receive(:make_request)
.with(path, person_id: person_id, pop_id: pop_id)
.and_return(mock_response)
end
it 'logs a deprecation warning' do
expect(Rails.logger).to receive(:warn)
client.get_person(population_id, person_id)
end
end
end
...
end
运行上述测试给了我一个
控制台中出现Failure/Error: Unable to find matching line from backtrace
错误。我甚至不确定这个神秘的信息意味着什么。即使在测试描述中放置一个空的块也会导致此错误。简单的解决方案是在自己的描述中将此日志测试移到共享上下文之外,但我希望每个函数只有一个描述。任何帮助正确地完成这项测试的人都将不胜感激。感谢