LoginSignup
3
0

【Rails Rspec 備忘録】Failure/Error: 〇〇 expected: 1 got: 2

Posted at

はじめに

※rails初心者向けです。


Rspecでテストコードを書いていた時に、 Failure/Error: 〇〇 expected: 1 got: 2 に直面しました。
備忘録として解決法を残しておこうと思います。

やりたかったこと

レコードが存在しない場合に新しくid=1のレコードを作成して保存するようなテストを書こうと思いました。

間違ったコード

createを2回しているため、エラーが起きた。
expect(テーブル名).exists?(1).to be(false)でレコードの中身をnilにして新しくcreateできると思ったが 、id = 2のレコードが作られてしまった。

hoge_spec.rb
describe `PUT /hoge/fuga` do
  before do
    @hoge = create(:hoge, 1)
  end

  context 〇〇 do
      it 'レコードが存在しない場合新しくid=1のレコードを作成する' do
    expect(テーブル名).exists?(1).to be(false)
    @hoge = create(:hoge, id: 1)
    put ...........
    json = Json.parse(response.body)
    #レコードが作成されたことの確認
    expect (テーブル名).to eq(1)
    #保存の確認
    hozon = テーブル名.to eq テーブル名.first
      end
  end
end

解決法

before doで書いていた

 @hoge = create(:hoge, id: 1)

を、before doから消し、各テスト項目に書くことで2回作成されることを防いだ。

hoge_spec.rb
describe `PUT /hoge/fuga` do
  before do
    # 省略(@hoge = create(:hoge, id: 1)は消す)
  end

  context 〇〇 do
      it 'レコードが存在しない場合新しくid=1のレコードを作成する' do
    expect(テーブル名).exists?(1).to be(false)
    put ...........# 省略
    @hoge = create(:hoge, id: 1)
    json = Json.parse(response.body)
    #レコードが作成されたことの確認
    expect (テーブル名).to eq(1)
    #保存の確認
    hozon = テーブル名.to eq テーブル名.first
  end
end

最後に

いけた。

3
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
3
0