Rspec "NoMethodError"
Rspec "NoMethodError"
我是使用 RSpec 在 Ruby 中进行单元测试的新手,我在执行非常基本的单元测试时遇到了问题。我习惯在Python和JavaScript中进行单元测试,我通常不会运行进入这个问题。
我只是想使用 puts 语句测试 STDOUT。这是我的规格。
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
这里是my_file.rb
class C
def main
puts "Hello World"
end
end
这里没有主要代码,只是一个简单的输出测试,但是当我 运行 我的规范:
时收到 NoMethodError
错误
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)>'
它说我有一个未定义的方法 main
而我确实在 my_file.rb
中定义了它,我知道这个错误通常是由于我在定义之前调用了一个方法。不确定我在这里做错了什么,因为我认为该方法已定义。任何帮助是极大的赞赏!
我可以想到两个可能的原因:
1) 在 运行 时加载的 my_file
可能不是您认为的那样。我建议在其中放一些东西,比如 puts
或 raise
,看看文件是否真的是 运行.
您可能希望使用 require_relative
而不是 require
,因为这样您可以更好地控制加载哪个文件。
2) 你有 2 个 describe
。我会建议删除内部的。
此外,规范文件中的 1 行有 2 个错误;这是更正后的版本:
expect {@c.main}.to output("Hello World\n").to_stdout
'World'没有大写,"Hello World".
末尾没有"\n"
我是使用 RSpec 在 Ruby 中进行单元测试的新手,我在执行非常基本的单元测试时遇到了问题。我习惯在Python和JavaScript中进行单元测试,我通常不会运行进入这个问题。
我只是想使用 puts 语句测试 STDOUT。这是我的规格。
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
这里是my_file.rb
class C
def main
puts "Hello World"
end
end
这里没有主要代码,只是一个简单的输出测试,但是当我 运行 我的规范:
时收到NoMethodError
错误
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)>'
它说我有一个未定义的方法 main
而我确实在 my_file.rb
中定义了它,我知道这个错误通常是由于我在定义之前调用了一个方法。不确定我在这里做错了什么,因为我认为该方法已定义。任何帮助是极大的赞赏!
我可以想到两个可能的原因:
1) 在 运行 时加载的 my_file
可能不是您认为的那样。我建议在其中放一些东西,比如 puts
或 raise
,看看文件是否真的是 运行.
您可能希望使用 require_relative
而不是 require
,因为这样您可以更好地控制加载哪个文件。
2) 你有 2 个 describe
。我会建议删除内部的。
此外,规范文件中的 1 行有 2 个错误;这是更正后的版本:
expect {@c.main}.to output("Hello World\n").to_stdout
'World'没有大写,"Hello World".
末尾没有"\n"