Ich bin neu in der Unit-Prüfung in Ruby mit RSpec und ich habe Schwierigkeiten, einen sehr grundlegenden Unit-Test durchzuführen. Ich bin es gewohnt, Unit-Tests in Python und JavaScript durchzuführen, und dieses Problem tritt normalerweise nicht auf.Rspec "NoMethodError"
Ich versuche einfach ein STDOUT mit der Puts-Anweisung zu testen. Hier ist meine Spezifikation.
my_spec.rb
require 'my_file'
describe C do
before(:all) do
@c = C.new
end
describe C do
subject(:C) { described_class.new }
it 'should print Hello World' do
expect {@c.main}.to output("Hello world").to_stdout
end
end
end
Hier ist my_file.rb
class C
def main
puts "Hello World"
end
end
Kein größerer Code hier, nur ein einfacher Test für die Ausgabe, aber ich bin mit dem einem NoMethodError
Fehler zu erhalten, wenn ich meinen spec laufen:
Failures:
1) C C should print Hello World
Failure/Error: expect {@c.main}.to output("Hello world").to_stdout
NoMethodError:
undefined method `main' for #<C:0x007fe54488a550>
# ./spec/my_spec.rb:12:in `block (4 levels) in <top (required)>'
# ./spec/my_spec.rb:12:in `block (3 levels) in <top (required)>'
Es heißt, ich habe eine undefinierte Methode main
Wenn ich es in my_file.rb
definiert habe, was ich über diesen Fehler weiß, ist es in der Regel wegen mir eine Methode aufrufen, bevor es definiert ist. Nicht sicher, was ich hier falsch mache, da ich dachte, dass die Methode definiert ist. Jede Hilfe wird sehr geschätzt!
Danke! Das hat funktioniert. Die Verwendung von 'require_relative' war der richtige Weg. – SalceCodec