2017-01-13 3 views
1

In meiner Rails 5 app erstellen und lösche ich diese Edelsteine ​​unter anderem bin mit:Es kann keine Benutzer in Rspec mit Devise und DeviseTokenAuth aktualisieren, obwohl funktionieren

gem "devise", "~> 4.2.0" 
gem "devise_token_auth" 

Mein Benutzermodell:

class User < ActiveRecord::Base 
    devise :database_authenticatable, :registerable, :rememberable, :trackable, :validatable 
    include DeviseTokenAuth::Concerns::User 

Ich kann keine Rspec Anfrage erstellen, um einen Benutzer zu aktualisieren. Was auch immer ich versucht habe, es ist fehlgeschlagen:

require "rails_helper" 

RSpec.describe UsersController, type: :controller do 
describe "PATCH #update" do 
    context "with valid params" do 
     it "updates the requested user" do 
     u1 = create(:user) 
     patch :update, params: { id: u1.to_param, user: attributes_for(:user, name: "name_new", email: "[email protected]") }, 
       format: :json 

     u1.reload 
     expect(u1.name).to eq("name_new") 
     end 
    end 

Die Sache ist die, dass ein Test für das Erstellen und Löschen eines Benutzer gut funktioniert. Nur die Aktualisierung funktioniert nicht.

Es sendet die neuen Parameter während der Patch-Anfrage, aber die zurückgegebenen Parameter eines Benutzers sind immer die alten. Was ist der Fehler - ich habe keine Ahnung, es sagt nur, dass der Test fehlschlägt. Und noch einmal - nur ein Update.

Ich habe versucht, PUT und POST zu verwenden - immer noch fehlgeschlagen.

Antwort

0

Sie benötigen password und password_confirmation, um Gerätebenutzer standardmäßig zu aktualisieren. Versuchen Sie, sie zu übergeben.

Diese Route aktualisiert die Kontoeinstellungen eines vorhandenen Benutzers. Die standardmäßig akzeptierten Parameter sind password und password_confirmation, aber dies kann mit dem System devise_parameter_sanitizer angepasst werden. Wenn config.check_current_password_before_update auf: attributes gesetzt ist, wird der Parameter current_password vor jeder Aktualisierung geprüft, wenn er auf: password eingestellt ist, wird der Parameter current_password nur überprüft, wenn die Anfrage das Benutzerpasswort aktualisiert.

+0

ich ausprobiert habe. – Otaffa

+0

können Sie Ihre Frage mit Fehlerverfolgung bearbeiten? –

0

Hier ist der Rspec-Test, den ich vor einiger Zeit geschrieben hatte.

it 'updates a user\'s email_address and password' do 
    new_password = Faker::Internet.password(8) 
    email_address = Faker::Internet.email 

    request_params = { 
     'email' => email_address, 
     'name' => Faker::Name.name, 
     'password' => new_password, 
     'password_confirmation' => new_password 
    } 

    put '/myapp/v1/system/auth', request_params.to_json, subdomain_login(user.uid, password, account.subdomain) 
    expect(response).to have_http_status(:ok) 

    # Validating the password update with sign_in 
    request_params = { 
     'email' => email_address, 
     'password' => new_password 
    } 

    post '/myapp/v1/system/auth/sign_in', request_params.to_json, 
     { 'ACCEPT' => "application/json", 
     'Content-Type' => "application/json" } 

    expect(response).to have_http_status(:ok) 
    end 

Hier das Transkript von der Konsole

Anfängliche Benutzer

#<Myapp::V1::System::User id: "13153737-9efb-47e2-8ac9-85aa28befa2b", provider: "email", uid: "[email protected]", name: nil, nickname: nil, image: nil, email: "[email protected]", created_at: "2017-01-13 11:50:01", updated_at: "2017-01-13 11:50:01"> 

aktualisieren Params

{"email"=>"[email protected]", "name"=>"Norberto Zulauf", "password"=>"OnT3Zv19YpZ", "password_confirmation"=>"OnT3Zv19YpZ"} 

Antwort Körper

"{\"status\":\"success\",\"data\":{\"id\":\"13153737-9efb-47e2-8ac9-85aa28befa2b\",\"email\":\"[email protected]\",\"name\":\"Norberto Zulauf\",\"provider\":\"email\",\"uid\":\"[email protected]\",\"nickname\":null,\"image\":null,\"created_at\":\"2017-01-13T11:50:01.175Z\",\"updated_at\":\"2017-01-13T11:50:03.436Z\"}}" 

Bitte beachten Sie, dass die Registrierungen Controller (die auch den Benutzer aktualisiert) außer Kraft gesetzt ist, eine bestimmte Anforderung zu erfüllen.

Fügen Sie faker Gem hinzu, falls erforderlich, um den Code auszuprobieren. Siehe diesen Thread für subdomain_login Helfer

RSpec: Authenticating before test with devise_auth_token

+0

Ich habe das versucht. – Otaffa

Verwandte Themen