[英]Controller action not running in rspec test
我正在嘗試測試我擁有的控制器的索引操作。 我希望它返回屬於用戶的名為Moments的實例。 我正在使用FactoryGirl和Rspec。 我驗證用戶有時間,就像我調用@user.moments
,它返回它們。 但是,當我使用get :index
,它返回一個帶有空response.body
的200。
這是我的Rspec:
require 'spec_helper'
describe Api::V1::MomentsController do
before do
@moment = FactoryGirl.create(:moment)
end
it 'should return moments' do
expect(controller).to receive(:index)
@user = @moment.user
request.env['Authorization'] = "Token token=#{@user.authentication_token}"
get :index
expect(response.status).to eq(200)
puts response.body
end
after do
@moment = nil
@user = nil
end
end
這是我的工廠:
FactoryGirl.define do
def time_rand from = 0.0, to = Time.now
Time.at(from + rand * (to.to_f - from.to_f))
end
sequence :email do |n|
"email#{n}@ploonky.com"
end
sequence :fullname do |n|
"Waiter Number#{n}"
end
sequence :handle do |n|
"Person#{n}"
end
factory :user, :aliases => [:owner] do
fullname
birthdate "1978-12-12"
email
password "password1"
password_confirmation "password1"
handle
tags {
Array(10).sample.times.map do
FactoryGirl.create(:tag)
end
}
end
sequence :datetime do
"#{time_rand}"
end
factory :moment do
datetime
text "can't wait to get through this busy day"
association :location, :factory => :location
user_id { location.user_id }
is_public true
is_deleted false
end
factory :location do
label "home"
street "248 Mckibbin st"
city "brooklyn"
state "NY"
zip "11206"
latitude 40.7063048
longitude -73.9396323
association :user, :factory => :user
country "USA"
is_deleted false
end
factory :tag do
value "busy as hell"
is_deleted false
end
end
最后,控制器動作:
class Api::V1::MomentsController < ApplicationController
before_filter :restrict_access, :except => :public
respond_to :json
def index
updateDate=params['updated_at'] ? DateTime.iso8601(params['updated_at']) : nil
include_deleted = params['include_deleted'] ? params['include_deleted'].to_i : nil
friends_ids=Friendship.get_friends(api_user,Friendship::APPROVED)
friends_ids=friends_ids.map do |friend_ids|
if friend_ids
friend_ids[:id]
end
end
user_ids=friends_ids.append(api_user.id)
moments=Moment.user_moments(user_ids, include_deleted == 1)
#filter out moments older than updateDate
if updateDate
moments=moments.where('updated_at>?',updateDate)
end
moments=buildFullMoments(moments, api_user)
render :json => moments
end
end
expect(controller).to receive(:index)
你剛剛控制了你的控制器動作。 控制器操作中的所有代碼現在都沒有運行。 刪除此行。
Derek說的是什么,你還需要傳遞請求的格式:
get :index, format: :json
因為你的控制器只會respond_to :json
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.