2017-03-28 2 views
0

Ich habe eine Spalte 'full_name' in Stäbe Tabelle definiert, die auch nicht null festgelegt ist. Wenn ich den folgenden Test (patient_test.rb) durchführe, bekomme ich die unten angegebene Terminalausgabe. Da ich den Test gegen den Staff Table nicht durchführe verstehe ich nicht warum ich diesen Fehler bekomme.Fehler: ActiveRecord :: StatementInvalid: Mysql2 :: Fehler: Feld 'full_name' hat keinen Standardwert

Kann jemand vorschlagen, warum ich diesen Fehler bekomme, wenn ich nicht einmal den Test auf diesem bestimmten Modell führe.

Schema für Stäbe Tabellen

create_table "staffs", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8" do |t| 
    t.string "full_name", null: false 
    t.string "first_name", null: false 
    t.string "middle_name" 
    t.string "last_name", null: false 
    t.boolean "gender",  null: false 
    t.string "telephone", null: false 
    t.string "email",  null: false 
    t.datetime "created_at", null: false 
    t.datetime "updated_at", null: false 
    end 

Testdatei (patient_test.rb)

require 'test_helper' 

class PatientTest < ActiveSupport::TestCase 

test "should not save user without patient" do 
    patient = Patient.new 
    assert_not user.save 
end 

end 

Terminal-Ausgang.

rake test 
(in /home/user/Rubymine/project1) 
Run options: --seed 51365 

# Running: 

E 

Error: 
PatientTest#test_should_not_save_user_without_patient: 
ActiveRecord::StatementInvalid: Mysql2::Error: Field 'full_name' doesn't have a default value: INSERT INTO `staffs` (`created_at`, `updated_at`, `id`) VALUES ('2017-03-28 08:45:58', '2017-03-28 08:45:58', 980190962) 



bin/rails test test/models/patient_test.rb:9 



Finished in 0.112169s, 8.9151 runs/s, 0.0000 assertions/s. 

1 runs, 0 assertions, 0 failures, 1 errors, 0 skips 

Darüber hinaus haben meine staff.rb-Dateien nur die Beziehungen und Bereiche (falls vorhanden) in ihnen.

Staff.rb Datei

class Staff < ApplicationRecord 

    has_one :user 
    has_many :time_slots 

    validates_presence_of :full_name 
end 

Inhalt bei /fixtures/staffs.yml

# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html 

# This model initially had no columns defined. If you add columns to the 
# model remove the '{}' from the fixture names and add the columns immediately 
# below each fixture, per the syntax in the comments below 
# 
one: {} 
# column: value 
# 
two: {} 
# column: value 
+0

gibt es Vorrichtungen der Test-Framework zu erstellen versucht? Wenn Sie Minitest verwenden sie sind in 'Test/fixtures' – Iceman

+1

@Iceman habe ich geschrieben, die Zusammenarbeit Entsprechende Dateiinhalte für die Mitarbeiter. plaease check :) – TargetBlank

Antwort

0

Das ist, weil Sie null falschen Zustand der meisten der Spalten auf Stäben Tabelle erklärt. Rails laden alle Fixtures vor jedem Testlauf. Wenn die Fixture "staffs.yml" getroffen wird, wird der Fehler sofort ausgelöst, da das Fixture zwei Datensätze (einen und zwei) enthält, die keine von der Datenbank benötigten Werte haben.

Sie haben grundsätzlich drei Möglichkeiten:

  1. Entfernen Sie die Datei der Befestigung: staffs.yml
  2. kommentiert (die ‚#‘ Notation vor allen Linien auf dieser Halterung geben
  3. der hinzufügen erforderlichen Spalten mit Werten für die Mitarbeiter ein und zwei
+0

Vielen Dank !! Du hast die Lösung gefunden! Für zukünftige Besucher ist dies die Lösung für den Fehler. Ich habe diese Antwort gewählt, aber meine Abstimmung ist leider noch nicht sichtbar. – TargetBlank

Verwandte Themen