質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

RSpec

RSpecはRuby用のBDD(behaviour-driven development)フレームワークです。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

2回答

116閲覧

RSpecテストにおけるletの遅延評価について

hirodesu85

総合スコア1

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

RSpec

RSpecはRuby用のBDD(behaviour-driven development)フレームワークです。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2024/04/05 06:58

編集2024/04/05 07:02

前提

Everyday Rails - RSpecによるRailsテスト入門を読んでいて疑問点があります
letに関する遅延評価の部分で理解できない部分があります

発生している問題・エラーメッセージ

let(:blog) { Blog.create(title: 'RSpec必勝法', content: 'あとで書く') } it '正しく検索できること' do expect(Blog.search("RSpec")).to include(blog) end it 'ブログの取得ができること' do expect(Blog.first).to eq blog end

上記テストに関して
「正しく検索できること」はテストがパスするのに対して
「ブログの取得ができること」はテストがパスしないのが納得できません

letが遅延評価なのであればBlog.search("RSpec")を実行したタイミングでは
Blog.createは実行されていないのでBlog.searchの戻り値は空の配列であり
テストはパスしないのが正しいのではないかと考えています

補足情報

searchメソッドは書籍の中で定義されているものと同様のものを用いています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

こちらで解決いたしました
https://qiita.com/jnchito/items/cdd9eef2ed193267c651

投稿2024/04/08 10:00

hirodesu85

総合スコア1

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

遅延の問題ではなく、expect(Blog.first).to eq blog 実行直以前に Blog が空では無いのでは?
expect(Blog.last).to eq blog
なら通るかも。

投稿2024/04/05 08:54

winterboum

総合スコア23349

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hirodesu85

2024/04/05 13:04

回答有り難うございます!! ただこの2つめのテストに関しては通らないのがおそらく通らないのが正しいんです(通らないテストの例として説明されてたソースコードなので) またBlogが空であることも確認済みです 理解できない点は2つめのテストが上手くいかないのであれば1つめのテストもうまくいかないべきなのではないかという点です!
winterboum

2024/04/05 13:24

ふむ その例を書いてる所に理由は書いては無いですか? 私が書くときは 「blogいつ評価されるのだろう?」と悩むのが嫌なので、クリティカルなときは it 'ブログの取得ができること' do blog expect(Blog.first).to eq blog end としたり let! したりしてしまいます
hirodesu85

2024/04/08 10:00

返信遅れてしまって申し訳ございません。 自己解決いたしました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問