我目前正在组建一个关于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修复 - 但是我已经添加了没有效果,并且我认为在使用请求规范时你不需要这些,因为它们应该贯穿整个堆栈?任何人都可以提出一些亮点,对于要求规格并且有点困惑都是新的。
答案 0 :(得分:0)
您的数据库中没有tasks
,这就是它返回空数组的原因。
您需要在致电task
行动之前创建index
。
您可以使用Task
的{{3}} gem创建工厂,也可以在调用create
操作之前调用TasksController
的{{1}}操作:< / p>
index
参考FactoryGirl(定义工厂): facatory_girl_rails