学习Rspec,只使用Ruby,而不是Rails.我有一个脚本,从命令行按预期工作,但我无法通过测试.
相关代码:
class Tree
attr_accessor :height, :age, :apples, :alive
def initialize
@height = 2
@age = 0
@apples = false
@alive = true
end
def age!
@age += 1
end
Run Code Online (Sandbox Code Playgroud)
规范:
describe "Tree" do
before :each do
@tree = Tree.new
end
describe "#age!" do
it "ages the tree object one year per call" do
10.times { @tree.age! }
expect(@age).to eq(10)
end
end
end
Run Code Online (Sandbox Code Playgroud)
而错误:
1) Tree #age! ages the tree object one year per call
Failure/Error: expect(@age).to eq(10)
expected: 10
got: nil
(compared using ==)
Run Code Online (Sandbox Code Playgroud)
我认为这是所有相关的代码,如果我在发布的代码中遗漏了某些内容,请告诉我.从我可以看出错误来自rspec中的范围,并且@age变量没有以我认为它应该的方式传递到rspec测试,因此在尝试调用测试中的函数时是nil.
@age是每个Tree对象中的变量.你是对的,这是一个范围'问题',更像是一个范围的功能 - 你的测试没有命名变量@age.
它所拥有的是一个名为的变量@tree.那Tree有一个叫做的属性age.这应该工作,如果不是,请告诉我:
describe "Tree" do
before :each do
@tree = Tree.new
end
describe "#age!" do
it "ages the tree object one year per call" do
10.times { @tree.age! }
expect(@tree.age).to eq(10) # <-- Change @age to @tree.age
end
end
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
90 次 |
| 最近记录: |