Ich verwende Rails 5.1.3 im API-Modus und benutze Gerät zur Authentifizierung. Ich möchte folgendes tun:Testen, um einen neuen Benutzer auf dem Gerät zu erstellen
1 - Während der Erstellung eines neuen Benutzers, erstellen Sie ein Unternehmen (ein anderes Modell) mit den Namen der Benutzer E-Mail zu sein und setzen diese Firma als das Unternehmen des Benutzers 2 - a schreiben Test dieses Szenario
um zu validieren Artikel # 1, zu erreichen, ich meine eigene Registrierungen Controller erstellen und überschreiben die Methode erstellen, die wie folgt aussehen:
def create
super
if @user.persisted?
company = Company.new(name: @user.email, users: [@user])
@company.save
end
end
Aber ich bin nicht in der Lage Einzelteil zu erreichen # 2. Ich habe verschiedene Probleme, je nachdem, was ich mache. Also, ich habe ein paar Fragen:
a) Sollte ich eine Controller-Spezifikation schreiben? Sieht aus wie diese und schlägt fehl, da ein 200 statt 201. Aber auch diese Art und Weise erhalten, I`m nicht sicher, devise wirklich schafft den Benutzer:
describe "Create user" do
it "Must create a company when creating user" do
post :create, :params =>{user: {email: "[email protected]"}}
expect(response).to have_http_status(:created)
end
end
b) Soll ich eine Anfrage spec schreiben? Sieht aus wie diese und nicht mit dem gleichen Grund: bekommt eine 200 statt 201.
it "Must create a company when creating user" do
post "/users", :params => {:user => {:email => "[email protected]"}}
expect(response).to have_http_status(201)
end
c) Sollte ich einige Locken ausführen zu verstehen, was los ist?
curl -v -H "Accept: application/json" -H "Content-Type: application/json" -XPOST http://localhost:3000/users -d'{"user":{"email": "[email protected]"}}'
Dann habe ich diesen Fehler:
{"status":406,"error":"Not Acceptable","exception":"#\u003cActionController::UnknownFormat: ActionController::UnknownFormat
Und bekam diese auf Konsole meines Servers:
Started POST "/users" for 127.0.0.1 at 2017-09-08 01:46:43 -0300
Processing by MyDevise::RegistrationsController#create as JSON
Parameters: {"user"=>{"email"=>"[email protected]"}, "registration"=>{"user"=>
{"email"=>"[email protected]"}}}
(0.6ms) BEGIN
User Exists (1.6ms) SELECT 1 AS one FROM `users` WHERE `users`.`email` = BINARY '[email protected]' LIMIT 1
(0.4ms) ROLLBACK
Completed 406 Not Acceptable in 39ms (ActiveRecord: 2.6ms)
ActionController::UnknownFormat (ActionController::UnknownFormat):
app/controllers/my_devise/registrations_controller.rb:4:in `create'
Also, was ich fehle? Ist es ein CSRF-Problem? Muss ich etwas konfigurieren, um mit meinen Locken arbeiten zu können? Soll die Anforderungsspezifikation oder die Controller-Spezifikation verwendet werden?
Ich habe einige Beispiele gefunden, wie man Benutzer während der Tests anmeldet, aber nichts gefunden, wie man die Erstellung eines Benutzers testet.
Bitte helfen Sie mir.
Danke
Sie erhalten 406, weil Sie eine JSON-Antwort anfordern, diese jedoch nicht im Controller definiert haben. Nicht sicher über das HTTP 200 hier. Sie können jedoch einige andere Matcher ausprobieren, um festzustellen, ob der Benutzer erstellt wird, z. 'expect (assigns (: user)) .be_persisted' – EJ2015
In diesem Ausschnitt sieht es aus, als wäre es ein Problem, aber ich habe dies während meiner Versuche im Controller geändert und nicht funktioniert. –