2011-11-17 16 views
9

私が書いている非常に単純な "このハッシュはこのキーを持っていますか"の理由を理解しようとしています。私は次のことをしようとしている私のRubyのREPLに行く...RSpec 2.7とハッシュshould have_key

[3] pry(main)> a_hash = {:a=>"A"} 
=> {:a=>"A"} 
[4] pry(main)> a_hash.should have_key :a 
NoMethodError: undefined method `have_key' for main:Object 
from (pry):4:in `<main>' 
[5] pry(main)> a_hash.keys.length.should == 1 
=> true 
[8] pry(main)> a_hash.has_key? :a 
=> true 

最初のテストは、私が働いて取得したいものを明らかにし、私はちょうどRSpecのが私のREPL環境にロードされていることを確認するために実行している第二の試験。

答えて

4

RSpecの例の中で実際にこれを行う必要があります。私はあなたがその種のコードをどこにでも書くことはできないと思います。

describe "" do 
    it "has a key" do 
    ... 
    end 
end 
+0

私は同意しますが、私はまだ試していませんが有望な素敵な宝石があります。 https://github.com/amatsuda/interactive_rspec – lucapette

+0

私はもともと 'des/it'ブロックで囲まれた' blah_spec.rb'ファイルに自分の仕様を書きました。そして、Rubyは#に対して '未定義メソッド' have_key ' (NoMethodError) ' – cfeduke

+0

D'oh!私は実際に 'it'ブロックを見逃していました。私は' describe'の中でそれをまっすぐにやっていました...そして今は動作します! – cfeduke

22

"it"ブロックの外にRSpecマッチャーを実際に置くことができます。 RSpec :: Matchersをインクルードするだけです。

[ ~/work/mobile_server (master)]$ irb 
>> require 'rspec' 
true 
>> include RSpec::Matchers 
Object < BasicObject 
>> {a: 1}.should have_key(:a) 
true 
+0

これは間違いなくより良い/より有益な答えだと思います。 info @ Costiに感謝します。 –

+0

RSpec 3では、 "expect({a:1})。have_key(:a)"とタイプする必要があります。 – Evmorov

関連する問題