它在共享上下文中阻塞的Rspec导致'无法从回溯中找到匹配的行'错误

时间:2016-09-04 17:23:11

标签: ruby-on-rails ruby rspec

我在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错误。我甚至不确定这个神秘的信息意味着什么。即使在测试描述中放置一个空的块也会导致此错误。简单的解决方案是在自己的描述中将此日志测试移到共享上下文之外,但我希望每个函数只有一个描述。任何帮助正确地完成这项测试的人都将不胜感激。感谢

0 个答案:

没有答案