2012-08-06 2 views
13

는 다음 RSpec에 조각을 고려RSpec : 해시를 문자열 키와 비교하여 해시를 기호 키로 비교 하시겠습니까?

it "should match" do 
    {:a => 1, :b => 2}.should =~ {"a" => 1, "b" => 2} 
end 

하나의 해시 키에 대한 기호를 사용하고 다른 하나는 키에 대한 문자열을 사용하기 때문에이 테스트는 실패합니다. 필자의 경우, 하나의 해시는 구문 분석 된 JSON 객체이고, 다른 하나는 객체를 만든 해시입니다. 내가 평등하다고 생각하길 바래.

내 고유 작성자를 작성하거나 두 해시에 문자열 키를 강요하기 전에이 (일반) 사례를 처리하는 일치 또는 기술이 있습니까?

답변

15

:

it "should match" do 
    {:a => 1, :b => 2}.stringify_keys.should =~ {"a" => 1, "b" => 2} 
end 
+0

이것은 레일 방법 –

+0

@ 존을 기호 키를 해시에 with_indifferent_access를 사용하십시오 루비되지 않았는지 확인 는 아래 hashrocket 루비 문법과 RSpec에 구문 기대와 예입니다 .s.in.co : 예,하지만 ActiveSupport를 독립 실행 형으로 사용할 수있게되었으므로 (작은 하위 집합을로드 할 수있는 능력이 있음) 허용되는 대답입니다. –

0

가장 간단한 방법은이 일을 일치하는 것 있도록 작성하는 것입니다 당신 문자열을 받으면 문자열을 넣거나 심볼을 얻으면 심볼을 넣는 것과 같습니다. 당신이 할 수있는

it "should match" do 
    {:a => 1}.with_indifferent_access.should =~ {'a' => 1}.with_indifferent_access 
end 
4

당신이 Rails's ActiveSupport에 액세스 할 수있는 가정 당신이 할 수없는 경우

, 내가 무엇을 할 줄은 같은 것을 할 것이다. with_indifferent_access을 사용하여 두 해시를 일치시킬 수 있습니다.

it 'matches two hashes' do 
    hash_1 = {a: 1, b: 2}.with_indifferent_access 
    hash_2 = {'a' => 1, 'b' => 2} 
    expect(hash_1).to match(hash_2) 
end 

참고 :

관련 문제