Gerade erst begonnen, Ruby and Rails zu lernen und habe ich derzeit einen Controller zur Authentifizierung eines Benutzers und ein Token erstellen erstellt. Es funktioniert perfekt Affe Tests tun (Klick um und Postbote), aber wenn sie mit diesem Befehl Prüfung tun:Running Unit Tests auf Controllern fehlgeschlagen vor dem Start
rails test
wird auch dieser Test nicht bestanden:
require 'test_helper'
class UserControllerTest < ActionDispatch::IntegrationTest
test "should be true" do
assert true
end
end
gibt er dies in der Klemme:
Error:
UserControllerTest#test_should_be_true:
ActiveRecord::StatementInvalid: SQLite3::ConstraintException: NOT
NULL constraint failed: users.email: INSERT INTO "users" ("created_at",
"updated_at", "id") VALUES ('2017-03-18 11:11:35.973444', '2017-03-18 11:11:35.973444', 980190962)
Kann nicht sehen, was das Problem sein sollte. Weil, wenn ich versuche, einen Komponententest innerhalb eines ActiveSupport zu erstellen: Testfall schlägt es mit derselben Ausgabe fehl.
Kann mir jemand sagen, warum es das tut?
Obs! Wenn Sie weitere Informationen über den Benutzer-Controller benötigen, schreiben Sie einfach einen Kommentar. Vielen Dank.
bearbeiten
In meiner Application haben diesen Code:
class ApplicationController < ActionController::Base
require 'json_web_token'
protect_from_forgery with: :exception
protected
def authenticate_request!
if !payload || !JsonWebToken.valid_payload(payload.first)
return invalid_authentication
end
load_current_user!
invalid_authentication unless @current_user
end
def invalid_authentication
render json: { error: 'Invalid Request'}, status: :unauthorized
end
private
def payload
auth_header = request.headers['Authorization']
token = auth_header.split(' ').last
JsonWebToken.decode(token)
rescue
nil
end
def load_current_user!
@current_user = User.find_by(id: payload[0]['user_id'])
end
end
Meine Testeinstellungen unter config/Umgebungen/test.rb
Rails.application.configure do
config.cache_classes = true
config.eager_load = false
config.public_file_server.enabled = true
config.public_file_server.headers = {
'Cache-Control' => 'public, max-age=3600'
}
config.consider_all_requests_local = true
config.action_controller.perform_caching = false
config.action_dispatch.show_exceptions = false
config.action_controller.allow_forgery_protection = false
config.action_mailer.perform_caching = false
config.action_mailer.delivery_method = :test
config.active_support.deprecation = :stderr
config.action_controller.allow_forgery_protection = false
end
Sie versuchen (irgendwie), einen Benutzer ohne E-Mail zu speichern, bevor Ihre Testfälle ausgeführt werden. Deshalb der Fehler. Überprüfen Sie die Einstellungen Ihres Testframeworks. – 31piy
@ 31piy Ich habe die Einstellungen für die Testumgebung eingefügt. Ist das die richtige Konfiguration? – McBoman
Es kann nicht mit dem eingefügten Code bestimmt werden. Wird Ihr Code auf Github oder einem öffentlich zugänglichen Repo gehostet? – 31piy