我使用的RSpec在我的Rails應用程序測試SessionsController我從制定覆蓋:
class Users::SessionsController < Devise::SessionsController
RSpec的測試設計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作爲第二個參數的值使事情起作用。
你能粘貼通過測試和失敗的考驗嗎?你可能錯過的細節(只是一個猜測)就是隱式使用Rspec'subject'。 – cenouro
[將Rspec默認GET請求格式設置爲JSON]的可能重複(http://stackoverflow.com/questions/11022839/set-rspec-default-get-request-format-to-json) –