意外的rspec行为

Nat*_*son 5 ruby rspec

学习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.

Und*_*ndo 5

@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)