render_views帮助程序没有按预期工作

时间:2014-12-18 16:17:34

标签: ruby-on-rails ruby rspec rspec-rails rspec3

我的控制器中有以下方法:

def create
  @job = Job.new(job_params)

  if @job.save
    render 'create_success', status: :created
  else
    render 'create_failure', status: :bad_request
  end
end

这是我的控制器规格:

require 'rails_helper'

RSpec.describe Api::V1::JobsController, :type => :controller do

  let(:actor)      { FactoryGirl.create(:user, :service_advisor) }
  let(:auth_token) { actor.authentication_token }

  describe 'POST #create' do
    render_views

    context 'with invalid attrubutes' do
      let(:job) { FactoryGirl.build(:job, customer_id: nil).attributes }

      it 'renders create_failure view' do
        expect(response).to render_template :create_failure
      end

      it 'returns 400 status code' do
        expect(response.status).to eq 400
      end
    end
  end
end

然而,出于某种原因,无论我做什么,控制器规格总是认为这个方法返回空响应和状态200.我可以使用postman或curl测试该方法并且它按预期工作 - 返回错误消息和状态代码(201/400),但我的规格总是将其视为具有200状态代码的空响应。

似乎render_views无效。我的环境是:

ruby​​ 2.0.0p594 Rails 4.1.0 rspec 3.1.5

1 个答案:

答案 0 :(得分:4)

您未在测试用例中调用创建操作。

it 'renders create_failure view' do
    post :create, job
    expect(response).to render_template :create_failure
end