2016-09-08 10 views
1

私はレールを使ってRspecを学んでいます。私はおいしいアプリでdocsを見てきましたが、理由は言及されていません。rspec let(:variables)をsymbolで呼び出せないのはなぜですか?

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を使用して期待値/パスを返したとき、なぜ13になったのですか?次のことを宣言することで

答えて

1

:あなたは、本質的にその本体として[:red, :blue, :pink, :yellow, :black]と方法power_rangersを定義するrspecを言っている

let(: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)

あなたはアーカンソーE言って:

expect(13).to eql(6)

:power_rangers.sizeが13であるので、それはシンボル:power_rangersの文字数です。

+0

これは意味があります。私は「13」がどこから来たのか疑問に思いました。 「rspecにメソッド 'power_rangers'を定義するように言う...」と言うと、メソッドを定義できますか?説明をくれてありがとう、それはすでにいくつかをクリアしました! – Iggy

+0

メソッドを定義する 'rspec'の' let'メソッドの裏にあるメタプログラミングです。 – Dharam

関連する問題