2015-09-24 50 views
1

我使用的RSpec在我的Rails應用程序測試SessionsController我從制定覆蓋:
class Users::SessionsController < Devise::SessionsControllerRSpec的測試設計SessionController用Jbuilder的觀點

的sign_in方法呈現一個JBuilder的觀點:
render '/users/sign_in', status: :ok

當使用curl測試視圖時,我會得到預期的結果。但是我無法按照我的規格進行這項工作。我收到以下錯誤:

Failure/Error: post '/users/sign_in', @data, format: 'json' 
ActionView::MissingTemplate: 
    Missing template users/sign_in with {:locale=>[:en], :formats=>[:html], :variants=>[], :handlers=>[:erb, :builder, :raw, :ruby, :jbuilder, :haml]}. Searched in: 

通過使用render_views,jbuilder視圖正在處理其他規格。但是,當我添加render_views這個天賦,我得到:

`method_missing': undefined local variable or method `render_views' for RSpec::ExampleGroups::UserEdit:Class (NameError) 

規格,其中render_views的作品,這是規範的類型之間的區別。它的工作在這裏: describe SomeController, type: :controller do

但不是在這一個:
describe 'User edit', type: :request do

這是一個請求類型,因爲我測試的API響應。正如我所說的,我從命令行使用curl獲得預期的JSON視圖,但它在測試中不起作用。我必須錯過一些小細節或做一些完全錯誤的事情。

我也嘗試添加這Rspec.configure但它並沒有改變什麼:在控制器的響應render json: { stuff }.to_json, status: :ok
config.render_views

編輯:

我必須在使用時加試合格。當我將其重構爲jbuilder視圖時,這開始失敗。

關於格式,我使用的是「simple_token_authentication」寶石和傳遞這個信息在規範每個請求:

{ 
    'X-User-Email' => user.email, 
    'X-User-Token' => user.authentication_token, 
    'Content-Type' => 'application/json', 
    'Accept'  => 'application/json' 
} 

我曾在其他測試format: :json,並沒有使其工作:

post '/users/sign_in', @data, format: :json 

於是設置格式::json作爲第二個參數的值使事情起作用。

+0

你能粘貼通過測試和失敗的考驗嗎?你可能錯過的細節(只是一個猜測)就是隱式使用Rspec'subject'。 – cenouro

+0

[將Rspec默認GET請求格式設置爲JSON]的可能重複(http://stackoverflow.com/questions/11022839/set-rspec-default-get-request-format-to-json) –

回答

1

您不需要爲request規格設置render_views。事實上,你現在得到的錯誤是說視圖實際上是呈現的,對於你的請求類型(html)只是沒有正確的視圖。

您需要添加format: :json你的第二個參數,在您的要求,如:

@data[:format] = :json 

post '/users/sign_in', @data