2017-03-18 3 views
1

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 
+0

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

+0

@ 31piy Ich habe die Einstellungen für die Testumgebung eingefügt. Ist das die richtige Konfiguration? – McBoman

+0

Es kann nicht mit dem eingefügten Code bestimmt werden. Wird Ihr Code auf Github oder einem öffentlich zugänglichen Repo gehostet? – 31piy

Antwort

0

Das Problem in Ihrem test/fixtures/users.yml ist wahrscheinlich. Es gibt zwei Benutzer ohne Attribute:

one: {} 
# column: value 
# 
two: {} 
# column: value 

Wenn Minitest beginnt es zwei Benutzer mit leeren Feldern zu erstellen versucht und es verletzt nicht NULL-Constraint für email. Versuchen Sie, diese Zeilen zu entfernen oder sie mit korrekten Werten zu füllen

+0

Das hat gut funktioniert :-) – McBoman