Rails 控制器为所有测试呈现迭代的最后一个模板

Rails controller rendering last template of iteration for all tests

我进行了控制器测试,检查是否为不同的状态代码呈现了正确的模板。他们成功了。

我正在尝试使用迭代重构测试,如下所示:

context 'renders multiple views based on status code' do
  VIEW_MAP = {
    404 => 'not_found', 500 => 'server_response', 402 => 'client_response'
  }

  VIEW_MAP.each do |status_code, view|
    retrieve_deal(status_code)
    it 'renders the #{view} template for status code #{status_code}' do
      get :show, params: { id: 'id' }
      expect(response).to render_template(view)
    end
  end
end

其中 retrieve_deal 方法使用状态代码模拟 API 调用,并将响应发送到控制器。

但是,为所有测试呈现最后一个模板 ('client_response')。我哪里出错了?

我认为每次迭代都需要在 context 中,并且:

retrieve_deal(status_code)

需要像 before.

这样的格式