Fix & Original-Tests am BodenModellversuche mit Mini-Test
ich zwei Modellversuche habe die im Format identisch sind, aber nur einer funktioniert. Ich bin ganz neu beim Testen im Mini-Test oder im Allgemeinen. Ich habe auch die Problemliste für den Mini-Test & gelesen haben einfach nicht genug Fähigkeit oder Verständnis, um eine Lösung zu finden, die von den verschiedenen Ausgaben funktioniert.
Ziel: Eine Arbeits .valid?
in meiner CampplayTest.rb Datei oder ein Verständnis, warum es & hat versagt, was ich verwenden sollte es Platz (wie devise der ist blowmage
sagt .Gültig sollte anstelle von .save verwendet werden?)
EDIT: Anscheinend mein Modell es ist - nicht sicher, wie das ist ungültig -
Failing Test-Datei hier unter den ursprünglichen Fehler sehen ...
require 'test_helper'
class CampplayTest < ActiveSupport::TestCase
# Test one missing from pair of ID
test 'invalid - no campaign' do
county = campplay.new(player_id: 1)
refute county.valid?, 'Campplay passed without a name'
end
end
Passing Testdatei hier ...
require "test_helper"
class County_Test < ActiveSupport::TestCase
def setup
@county = County.create(name: "Example Item")
end
test 'valid county' do
assert @county.valid?, 'county must have name'
end
# Test duplicate
test 'invalid - duplicate county' do
county = County.new(name: "Example Item")
refute county.valid?, 'county passed without a name'
end
end
Ich habe versucht ...
- die Geräte Clearing nur den Test läuft allein in
rails c test
- mit 3 inherit Wege für
test_helper.rb
- Wechsel zum Integrationstesthelfer in der Testdatei i tself
- mit dem Setup-Funktion
- Pluralisierung von Hand & durch das System mit ausspucken der Pluralisierung für
Campplay
- Capitolizing
- mit .save! in
rails c
&rails c test
- ändern
rails generate test_unit:model article title:string body:text
Beispiel mein Modell & fileds zurails generate test_unit:model Campplay campaign_id:integer player_id:integer
- Ändern der Testdateinamen & der Klassenname in der Testdatei zu
Campplay_Test
Meine Fehlermeldung entsprechen ...
2.3.1 :006 > c = Campplay.new(player_id: "1", campaign_id: "1")
=> #<Campplay id: nil, campaign_id: 1, player_id: 1, created_at: nil, updated_at: nil>
2.3.1 :007 > c.valid?
NoMethodError: undefined method `Campplay' for #<Campplay:0x00000004630890>
Did you mean? campaign
from /usr/local/rvm/gems/ruby-2.3.1/gems/activemodel-5.0.0/lib/active_model/attribute_methods.rb:433:in `method_missing'
from /usr/local/rvm/gems/ruby-2.3.1/gems/activemodel-5.0.0/lib/active_model/validator.rb:149:in `block in validate'
from /usr/local/rvm/gems/ruby-2.3.1/gems/activemodel-5.0.0/lib/active_model/validator.rb:148:in `each'
from /usr/local/rvm/gems/ruby-2.3.1/gems/activemodel-5.0.0/lib/active_model/validator.rb:148:in `validate'
(I truncated here to try & not spam people)
test_helper.rb
ENV["RAILS_ENV"] = "test"
require File.expand_path("../../config/environment", __FILE__)
require "rails/test_help"
require "minitest/rails"
class ActiveSupport::TestCase
fixtures :all
end
class ActionController::TestCase
include Devise::Test::ControllerHelpers
end
Mein Campplay Modell ...
class Campplay < ApplicationRecord
belongs_to :campaign
belongs_to :player
validates :campaign_id, presence: true
validates :player_id, presence: true
end
Gem Liste --local mit "test"
guard-minitest (2.4.6)
minitest (5.10.1, 5.8.3)
minitest-capybara (0.8.2)
minitest-color (0.0.2)
minitest-metadata (0.6.0)
minitest-rails (3.0.0)
minitest-rails-capybara (3.0.0)
rack-test (0.6.3)
rails-dom-testing (2.0.2)
test-unit (3.1.5)
Full Guard-Datei ...
bundle exec guard
RubyDep: WARNING: Your Ruby is outdated/buggy.
RubyDep: WARNING: Your Ruby is: 2.3.0 (buggy). Recommendation: upgrade to 2.3.1.
RubyDep: WARNING: (To disable warnings, see:http://github.com/e2/ruby_dep/wiki/Disabling-warnings)
12:46:03 - INFO - Guard::Minitest 2.4.6 is running, with Minitest::Unit 5.10.1!
12:46:04 - INFO - Guard is now watching at '/home/ubuntu/workspace/basicB'
12:46:07 - INFO - Running: test/models/campplay_test.rb
RubyDep: WARNING: Your Ruby is outdated/buggy.
RubyDep: WARNING: Your Ruby is: 2.3.0 (buggy). Recommendation: upgrade to 2.3.1.
RubyDep: WARNING: (To disable warnings, see:http://github.com/e2/ruby_dep/wiki/Disabling-warnings)
RubyDep: WARNING: Your Ruby is outdated/buggy.
RubyDep: WARNING: Your Ruby is: 2.3.0 (buggy). Recommendation: upgrade to 2.3.1.
RubyDep: WARNING: (To disable warnings, see:http://github.com/e2/ruby_dep/wiki/Disabling-warnings)
Run options: --seed 24359
# Running:
E
Error:
CampplayTest#test_invalid_-_no_campaign:
NameError: undefined local variable or method `campplay' for #<CampplayTest:0x00000003e05710>
Did you mean? campplays
test/models/campplay_test.rb:14:in `block in <class:CampplayTest>'
bin/rails test test/models/campplay_test.rb:13
E
Finished in 0.275098s, 3.6351 runs/s, 0.0000 assertions/s.
1 runs, 0 assertions, 0 failures, 1 errors, 0 skips
[1] guard(main)>
Mein Schema für die Campplays ...
create_table "campplays", force: :cascade do |t|
t.integer "campaign_id"
t.integer "player_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.index ["campaign_id"], name: "index_campplays_on_campaign_id"
t.index ["player_id"], name: "index_campplays_on_player_id"
end
Rails-Version - Situation wahrscheinlich festgelegt werden sollte - aber ich bin eine Checkliste jetzt & Wache nicht die Version der Annahme arbeiten, ist nur noch ein zwicken ...
mirv:~/workspace (master) $ cd basicB
mirv:~/workspace/basicB (master) $ ruby -v
ruby 2.3.0p0 (2015-12-25 revision 53290) [x86_64-linux]
mirv:~/workspace/basicB (master) $ rvm install 2.3.1
Already installed ruby-2.3.1.
To reinstall use:
rvm reinstall ruby-2.3.1
FIX
War einfach, es waren beschädigte Dateien ...
- Schienen zerstören Modell Campplay
- Schienen g Migration dropCampplay
- in der Migrationsdatei hat ein
drop_table :campplays
- die
rails g model Campplay campaign:references player:references
- Schienen db lauteten:
- Kopie & klebte mein früheres Modell Code migrieren ich
- Kopie & klebte Original speichern hatte Testcode, den ich gespeichert hatte
Kopie von der letzte Test-Datei ...
require 'test_helper'
class CampplayTest < ActiveSupport::TestCase
test 'valid Campplay' do
cp = Campplay.new(player_id: "1", campaign_id: "1")
assert cp.valid?, 'Campplay must have player_id'
end
# Test one missing from pair of ID
test 'invalid - no campaign' do
cp = Campplay.new(player_id: 1)
refute cp.valid?, 'Campplay passed without a campaign_id'
end
test 'invalid - no player' do
cp = Campplay.new(campaign_id: 1)
refute cp.valid?, 'Campplay passed without a name'
end
end
ich das Update gutgeschrieben @gaston wie er Zeit darauf
Leider ersetzt werden, aber es ist nicht klar, was Sie versuchen zu tun .Wo ist deine Testdatei? Ist dir bewusst, dass 'rails c' eine Konsole öffnet und keine Tests ausführt? – sixty4bit
Hallo @ sixty4bit ... Ich dachte, das Mapping in der Konsole sollte das Problem deutlicher als die Testdatei zeigen. Ich möchte, dass '.valid?' Funktioniert. Außerdem ist der 'rails c test' etwas, das ich aus der Rails-Dokumentation herausgezogen habe, die den Test env für Sie in die rails-Konsole lädt, um Fehlermeldungen zu ziehen - was soviel heißt wie das Ausführen Ihrer Testdatei. Ich werde mehr über das Thema auf den neuesten Stand bringen. – Mirv
können Sie Kampagnen- und Campplay-Klassen anzeigen ?, welcher Fehler "Test 'ungültig - keine Kampagne'" wirft? – Gaston