0
0

はじめに

先日、以下の現象が起きました。

・・・

今回のrspecの内容です。

  • describeitブロックを複数定義
  • subjectで、インスタンスを作成する処理をしている
  • そのインスタンスが返す値をテストしている
RSpec.describe 'PostShortcode' do
  subject { TestPost::Shortcode::PostShortcode.new(params) }

  ...

  it 'hoge' do
    expect(subject.hoge).to eq 'hoge'
  end

  it 'fuga' do
    expect(subject.fuga).to eq 'fuga'
  end

上記で実行すると、なぜか2回目以降itの時に、NameError: uninitialized constantが発生します。

NameError:
       uninitialized constant TestPost::Shortcode::PostShortcode

1回目のitは、テスト成功します。
2回目以降が、必ず失敗してしまいます...。定義はしているはずなのに...。

今回は、その解決方法をアウトプットいたします。

解決方法

.newするクラスを、RSpec.describeで記載をして、described_classを使用するようにしましょう。

RSpec.describe TestPost::Shortcode::PostShortcode do
  subject { described_class.new(params) }

described_classを使用すると、RSpec.describe直後に記載しているクラスを参照してくれます。

ただ、なぜこれで解決したかは謎のままです...。

まとめ

described_classを指定すれば、記載したクラス名を参照してくれるので、シンプルにテストを書くことができます。
ただ、それが今回の解決に繋がったのかは謎のままなので、分かり次第追記していこうと思います。

最後までご覧いただき、ありがとうございました。

参考文献

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0