RSpec请求规范测试始终返回空响应

时间:2017-03-13 08:53:27

标签: ruby-on-rails ruby rspec

我目前正在组建一个关于Rails(4.1.8)的项目,我正在尝试编写RSpec请求规范来测试api路由。然而奇怪的是,它似乎在运行测试时返回空响应,但是使用Postman执行直接请求会按预期返回json数据。

请求规范:

# spec/requests/tasks_spec.rb
require 'rails_helper'

RSpec.describe 'Tasks API', type: :request do
  render_views
  describe 'GET /tasks' do
    it 'returns tasks' do
      headers = {
      "ACCEPT" => "application/json"
      }
      get '/tasks', headers
      puts "Response: #{response}"
      expect(response.content_type).to eq("application/json")
      expect(json).not_to be_empty
    end
  end
end

结果:

Failure/Error: expect(json).not_to be_empty
       expected `[].empty?` to return false, got true

任务控制器的设置如下:

class TasksController < ApplicationController
  before_action :set_task, only: [:show, :update, :destroy]

  # GET /tasks
  def index
    @tasks = Task.all
    json_response(@tasks)
  end

回应关注:

module Response
  def json_response(object, status = :ok)
    render json: object, status: status
  end
end

规范支持:

module RequestSpecHelper
  # Parse JSON response to ruby hash
  def json
    JSON.parse(response.body)
  end
end

我已经阅读了类似的问题,谈论了一个rende_views修复 - 但是我已经添加了没有效果,并且我认为在使用请求规范时你不需要这些,因为它们应该贯穿整个堆栈?任何人都可以提出一些亮点,对于要求规格并且有点困惑都是新的。

1 个答案:

答案 0 :(得分:0)

您的数据库中没有tasks,这就是它返回空数组的原因。

您需要在致电task行动之前创建index

您可以使用Task的{​​{3}} gem创建工厂,也可以在调用create操作之前调用TasksController的{​​{1}}操作:< / p>

index

参考FactoryGirl(定义工厂): facatory_girl_rails