と機能を継承しましたグローバル名前空間を乱用することなく継承され、設定された機能をテストするのに苦労しているRSpec:テストルビーのスーパークラスは、私はサブクラスに継承された機能を提供する抽象クラスを持っていることを考えるとRSpecの
RSpec.describe Superclass do
let(:config_parameter) { :bar }
let(:test_subclass) do
# this feels like an anti-pattern, but the Class.new block scope
# doesn't contain config_parameter from the Rspec describe
$config_parameter = config_parameter
Class.new(Superclass) do
configuration_parameter $config_parameter
end
end
let(:test_instance) do
test_subclass.new
end
describe 'config parameter' do
it 'sets the class attribute' do
expect(test_subclass._configuration_parameter).to be(config_parameter)
end
end
describe 'execute' do
it 'fetches the data from the right place' do
expect(DataSource).to receive(:fetch).with(config_parameter)
instance.results
end
end
end
私がここで嘲笑している実世界のスーパークラスには、このパターンで合理的にうまくテストするいくつかの設定パラメータと他のいくつかの機能があります。
クラスやテストデザインについて明らかに悪いことがありますか?
おかげ
コードにコメントされた部分が何か悪いかどうか尋ねていますか?個人的に私は醜いと思う、私はちょうど前(:各)ブロックを使用するだろうが、質問は本当に明確ではありません。あなたがテストファイル全体を求めているなら、rspecのabout_shared_examplesを読まなければならないと思っています。このことをテストするのがもっとうまくいくと思います。 – arieljuod