2015-03-10 3 views
0

У меня возникли проблемы при попытке опубликовать в формате JSON для моего действия контроллера в моем RSpec тестRspec тест на сообщение в формате JSON

RSpec.describe RegistrationsController, type: :controller do 
    context 'Adding a Valid User' do 
    it 'Returns Success Code and User object' do 
    @params = { :user => {username: 'name', school: 'school'} }.to_json 
    post :create, @params 
    end 
    end 
end 

На данный момент я хочу, чтобы получить успешное сообщение запроса стрельбы, но я получаю эту ошибку назад все время

Failure/Error: post :create, @params 
AbstractController::ActionNotFound: 
    Could not find devise mapping for path "/lnf". 

Мои маршруты установки как так

Rails.application.routes.draw do 
constraints(subdomain: 'api') do 
    devise_for :users, path: 'lnf', controllers: { registrations: "registrations" } 

    devise_scope :user do 
    post "/lnf" => 'registrations#create' 
    end 
end 
end 

Rake маршруты OUTP uts

Prefix Verb    URI Pattern  Controller#Action 
user_registration POST /lnf(.:format) registrations#create {:subdomain=>"api"} 
lnf POST     /lnf(.:format) registrations#create {:subdomain=>"api"} 

У меня есть 2 объявления для одного и того же действия?

Может кто-нибудь пролить некоторый свет на это, пожалуйста

Благодарности

+0

Попробуйте указать 'subdomain':' post: create, x: 1, y: 2, subdomain:: api' –

+0

получить ту же ошибку назад..а другие идеи? – Richlewis

+0

Я не думаю, что вы должны одновременно использовать '' 'devise_for'' и' '' devise_scope'''. http://stackoverflow.com/questions/3827011/devise-custom-routes-and-login-pages https://github.com/plataformatec/devise#configuring-routes –

ответ

0

Ok так что после кропотливых несколько часов я получил мои тесты, проходящие правильно и проводки в формате JSON, выполнив следующие

require 'rails_helper' 

RSpec.describe RegistrationsController, type: :controller do 
    before :each do 
    request.env['devise.mapping'] = Devise.mappings[:user] 
    end 
context 'Adding a Valid User' do 
    it 'Returns Success Code and User object' do 
    json = { user: { username: "richlewis14", school: "Baden Powell", email: "[email protected]", password: "Password1", password_confirmation: "Password1"}}.to_json 
    post :create, json 
    expect(response.code).to eq('201') 
end 
end 
end 

Мои маршруты вернулись к нормальному состоянию

Rails.application.routes.draw do 
constraints(subdomain: 'api') do 
    devise_for :users, path: 'lnf', controllers: { registrations: "registrations" } 
end 
end 

И в моем Тестовая среда, я должен был добавить

config.action_mailer.default_url_options = { host: 'localhost' } 

Ключ здесь был

request.env['devise.mapping'] = Devise.mappings[:user] 

не полностью уверен, как еще к тому, что он делает, его следующий в моем списке, чтобы узнать, но мои тесты начинают работать и передать

Смежные вопросы