我正在使用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?
答案 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
的字符数。