如何在 RSpec 中存根 Rails 秘密?

oli*_*art 1 rspec ruby-on-rails rspec-rails

既然 Rails 附带了凭证/秘密文件,我似乎无法使用 RSpec 存根/覆盖秘密。

# credentials.yml.enc
my_token: 111
Run Code Online (Sandbox Code Playgroud)

使用环境变量,我们曾经这样做过

allow(ENV).to receive(:[]).with('my_token').and_return('')
Run Code Online (Sandbox Code Playgroud)

所以我期望能够应用相同的逻辑

allow(Rails.application.credentials).to receive(:my_token).and_return('')
Run Code Online (Sandbox Code Playgroud)

但它不会覆盖 Rails 的秘密。任何想法?谢谢

oli*_*art 5

应该是直接的,如下所述https://github.com/rspec/rspec-rails/issues/2099#issuecomment-472965256

describe 'Credentials' do
  it 'stubs credentials' do
    allow(Rails.application.credentials).to receive(:my_token).and_return('123')
    expect(Rails.application.credentials.my_token).to eq('123')
  end
end
Run Code Online (Sandbox Code Playgroud)