Ruby Erreur de Nom - Uninitialized constant
Je suis en train de faire exercices et je suis
obtenir NameError:Unitialized Constant MyUnitTests::Room
lors de l'exécution de test_ex47.rb.
test_ex47.rb:
require 'test/unit'
require_relative '../lib/ex47'
class MyUnitTests < Test::Unit::TestCase
def test_room()
gold = Room.new("Gold Room", """This room has gold in it you can grab. There's a doo to the north.""")
assert_equal(gold.name, "GoldRoom")
assert_equal(gold.paths, {})
end
def test_room_paths()
center = Room.new("Center", "Test room in the center.")
north = Room.new("North", "Test room in the north.")
south = Room.new("South", "Test room in the south.")
center.add_paths({:north => north, :south => south})
assert_equal(center.go(:north), north)
assert_equal(center.go(:south), south)
end
def test_map()
start = Room.new("Start", "You can go west and down a hole.")
west = Room.new("Trees", "There are trees here, you can go east.")
down = Room.new("Dungeon", "It's dark down here, you can go up.")
start.add_paths({:west => west, :down => down})
west.add_paths({:east => start})
down.add_paths({:up => start})
assert_equal(start.go(:west), west)
assert_equal(start.go(:west).go(:east), start)
assert_equal(start.go(down).go(up), start)
end
end
ex47.rb est situé dans le dossier lib et ressemble:
class Room
aatr_accessor :name, :description, :paths
def initialize(name, description)
@name = name
@description = description
@paths = {}
end
def go(direction)
@paths[direction]
end
def add_paths(paths)
@paths.update(paths)
end
end
Erreur:
Finished tests in 0.000872s, 3440.3670 tests/s, 0.0000 assertions/s.
1) Error:
test_map(MyUnitTests):
NameError: uninitialized constant MyUnitTests::Room
test_ex47.rb:22:in `test_map'
2) Error:
test_room(MyUnitTests):
NameError: uninitialized constant MyUnitTests::Room
test_ex47.rb:6:in `test_room'
3) Error:
test_room_paths(MyUnitTests):
NameError: uninitialized constant MyUnitTests::Room
test_ex47.rb:12:in `test_room_paths'
3 tests, 0 assertions, 0 failures, 3 errors, 0 skips]
- Vous ne savez pas si c'est juste dans votre question, et non pas dans votre code, mais dans le
Room
classe que vous avez actuellementaatr_accessor
plutôt queattr_accessor
. - Grâce mikej. Fixe et quelques autres telles choses, toujours la même erreur. >:|
Vous devez vous connecter pour publier un commentaire.
Le problème ici c'est que vous êtes la création d'une Salle d'objet à l'intérieur de la MyUnitTests classe sur la ligne 3. Ruby pense que vous voulez utiliser une classe appelée MyUnitTest::Chambre, qui n'existe pas. Vous avez besoin d'utiliser une classe absolue de référence, comme suit:
Avis de l' :: avant de la Salle.nouveau sur la ligne 3? Qui dit Ruby que vous voulez pour créer une Chambre de l'objet à partir du haut niveau de l'espace de nom 🙂
J'espère que cela répond à votre question.
EDIT: Vous aurez également besoin de changer votre d'autres références à la Salle de classe ::Chambre. Désolé, je pensais que seul celui du haut a été un problème à cause de l'indentation. Un examen plus attentif révèle que les autres besoin de l' :: en tant que bien.