我写了这个,然后就过去了。
it 'raises a GitConfigNotFound error when YAML config file cannot be found' do
allow(YAML).to receive(:load_file)
.with(Rails.root.join('config', 'git_config.yml'))
.and_raise(Errno::ENOENT)
expect { described_class::config }.to raise_error GitConfigNotFound
end
然后我试着将它放在一个上下文中以匹配我的其他测试,但它失败了。我的格式如下所示。有没有人知道为什么会这样?
context 'will raise a GitConfigNotFound exception if git config file is missing' do
before do
allow(YAML).to receive(:load_file)
.with(Rails.root.join('config', 'git_config.yml'))
.and_raise(Errno::ENOENT)
end
it { expect(described_class::config).to raise_error GitConfigNotFound }
end
它给了我这个输出,这似乎是我想要的但是由于某种原因没有抓住它:
1) GitConfigsLoader will raise a GitConfigNotFound exception if git config file is missing
Failure/Error: it { expect(described_class::config).to raise_error }
GitConfigNotFound:
Error: git_config.yml not found.
# ./lib/git_configs_loader.rb:9:in `rescue in config'
# ./lib/git_configs_loader.rb:7:in `config'
# ./spec/lib/git_configs_loader_spec.rb:37:in `block (3 levels) in <top (required)>'
答案 0 :(得分:2)
也许这就是@PeterAlfvin的意思,但我终于在答案中找到了答案!我使用的是expect(...)
而不是expect{...}
。 parens会立即执行并立即爆炸,并且不会被.to raise_exception
捕获。使用大括号允许raise_error
执行except块并捕获错误。
context 'when no git_config.yml file is proivded' do
before do
allow(YAML).to receive(:load_file).and_raise(Errno::ENOENT)
end
it { expect{ described_class::config }.to raise_exception GitConfigNotFound }
end