为什么我不能用符号调用rspec let(:variables)?

时间:2016-09-08 23:12:14

标签: ruby-on-rails rspec

我正在使用rails学习Rspec。我在津津有味的应用程序中查找了docs并且没有提到原因。

RSpec.describe "mighty morphin power rangers" do
  let(:power_rangers) { [:red, :blue, :pink, :yellow, :black]}

  it "have 5 rangers" do
    expect(power_rangers.size).to eql(5)
  end

  context "the second season" do
    it "enter white ranger!" do
      power_rangers << :white
      expect(power_rangers.size).to eql(6)
      expect(power_rangers).to eql([:red, :blue, :pink, :yellow, :black, :white])
    end
  end
end

我的问题是,当我第一次宣布let(:power_rangers)时,它使用符号(因此:)。但是当我进行测试时,例如expect(power_rangers.size).to eql(5),如果我expect(:power_rangers.size).to eql(5),则会返回错误。错误说:

  1) mighty morphin power rangers have 5 rangers
     Failure/Error: expect(:power_rangers.size).to eql(5)

       expected: 5
            got: 13

如果我在开头将变量声明为符号,我是否应该随时将其称为符号?当我使用:power_rangers并使用power_rangers时返回预期值/通过时,为什么它说它得到13?

1 个答案:

答案 0 :(得分:1)

通过声明以下内容:

let(:power_rangers) { [:red, :blue, :pink, :yellow, :black]}

您实际上是在告诉rspec定义一个power_rangers方法[:red, :blue, :pink, :yellow, :black]作为正文。

稍后当您致电power_rangers时,它会返回[:red, :blue, :pink, :yellow, :black]

所以打电话:

expect(power_rangers.size).to eql(6)

基本上与:

相同

expect([:red, :blue, :pink, :yellow, :black].size).to eql(6)

但是请致电:

expect(:power_rangers.size).to eql(6)

你在说:

expect(13).to eql(6)

由于:power_rangers.size为13,因此它是符号:power_rangers的字符数。