fea*_*ool 16 ruby ruby-on-rails rspec2
请考虑以下RSpec片段:
it "should match" do
{:a => 1, :b => 2}.should =~ {"a" => 1, "b" => 2}
end
Run Code Online (Sandbox Code Playgroud)
此测试失败,因为一个哈希使用符号作为键,另一个使用字符串作为键.在我的例子中,一个哈希是一个解析的JSON对象,另一个是创建该对象的哈希.我希望他们比较平等.
在我编写自己的匹配器或强制两个哈希来获得字符串键之前,是否存在处理此(常见)案例的匹配器或技术?
Sha*_*uli 18
你可以这样做:
it "should match" do
{:a => 1, :b => 2}.stringify_keys.should =~ {"a" => 1, "b" => 2}
end
Run Code Online (Sandbox Code Playgroud)
yac*_*acc 11
假设您可以访问Rails的ActiveSupport.您可以利用 with_indifferent_access
以匹配两个哈希值.下面是使用hashrocket Ruby语法和Rspec expect语法的示例:
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
Run Code Online (Sandbox Code Playgroud)
注意:确保with_indifferent_access
在带有符号键的哈希上使用