从super更新ruby哈希中的单个值

xia*_*kai 2 ruby rspec

我在rspec中编写测试,并试图用一些变量来声明let.

describe 'my_test' do
    let(:params) {{
        :happy => 1,
        :sad => 0,
    }}

    context 'mixed' do
        let(:params) {{
            :happy => 1,
            :sad => 1,
        }}
    end
end
Run Code Online (Sandbox Code Playgroud)

但后来我看到变量如何被过度编写super,这对于很长的params列表很方便:http://myronmars.to/n/dev-blog/2013/02/rspec-2-13-is-released

所以我的问题是,如何覆盖原始哈希中的单个值?我尝试过搜索,但只能找到覆盖所有值的方法.有下面的内容吗?

let(:hash) { super().updatehash('sad', '1') }
Run Code Online (Sandbox Code Playgroud)

Tar*_*ast 7

您可以使用Hash#merge重载哈希变量

let(:hash) { super().merge(:sad => '1') }
Run Code Online (Sandbox Code Playgroud)

它将使用您在散列中提供的键值对覆盖原始散列中的任何键值以进行合并.

如果您想要合并doco的链接,apidock很好:

http://apidock.com/ruby/Hash/merge

  • 谢谢!这是非常宝贵的. (2认同)