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

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

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

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

RSpec

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

Ruby on Rails

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

Q&A

解決済

2回答

386閲覧

RailsチュートリアルのテストをRspecで書きたい

da_ast

総合スコア7

Ruby on Rails 6

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

RSpec

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

Ruby on Rails

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

0グッド

0クリップ

投稿2020/10/25 07:24

Rspecの文法に関してご教授ください。
RailsチュートリアルのテストをRspecで書きたいのですが、うまくテストがパスしません。
Rspecの書き方の問題だと思うのですが、RailsもRspecも初学者のため正しい書き方がわかりません。

具体的にはRailsチュートリアルの6章、リスト 6.18:有効なメールフォーマットをテストするというところで、正規表現に則りフォーマットとして定めた正しいパターンのメールアドレスはパスさせるというテストです。

以下がチュートリアル通りのMinitestでのコード

Minitest

1require 'test_helper' 2 3class UserTest < ActiveSupport::TestCase 4 5 def setup 6 @user = User.new(name: "Example User", email: "user@example.com") 7 end 8 . 9 . 10 . 11 test "email validation should accept valid addresses" do 12 valid_addresses = %w[user@example.com USER@foo.COM A_US-ER@foo.bar.org 13 first.last@foo.jp alice+bob@baz.cn] 14 valid_addresses.each do |valid_address| 15 @user.email = valid_address 16 assert @user.valid? 17 end 18 end 19end

そしてこちらが自分で書いたRspecに変換したコード

Rspec

1require 'rails_helper' 2 3RSpec.describe User, type: :model do 4 5 before do 6 @user = User.new(name: "Example User", email: "user@example.com") 7 end 8 . 9 . 10 . 11 it "is acceptable with valid email" do 12 valid_addresses = %w[user@example.com USER@foo.COM A_US-ER@foo.bar.org first.last@foo.jp alice+bob@baz.cn] 13 valid_addresses.each do |valid_address| 14 @user.email = valid_address 15 expect(@user).to be_valid? 16 end 17 end 18end

そしてエラーコードが以下です

Failures: 1) User is acceptable with valid email Failure/Error: expect(@user).to be_valid? expected #<User id: nil, name: "Example User", email: "user@example.com", created_at: nil, updated_at: nil, password_digest: nil> to respond to `valid??` # ./spec/models/user_spec.rb:40:in `block (3 levels) in <main>' # ./spec/models/user_spec.rb:38:in `each' # ./spec/models/user_spec.rb:38:in `block (2 levels) in <main>' # -e:1:in `<main>'

ブロックの部分の書き方が間違っているのでしょうが、正しい記法がわかりません。
とても初歩的な質問だと思うのですが、どなたか教えていただけませんでしょうか。

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

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

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

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

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

no1knows

2020/10/25 08:22 編集

「RailsチュートリアルのテストをRspecで」で検索してみてください。
da_ast

2020/10/25 13:30

検索したページを参考に少し書き方を変えて解決しました。 ご助言ありがとうございました。
guest

回答2

0

be_valid?ではなくbe_validのはずですよ

投稿2020/10/25 15:55

kazu202

総合スコア4

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

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

da_ast

2020/10/27 02:11

その通りでした…ご指摘ありがとうございます。 直したらうまくテストがパスしました。 次からは質問する前にもう少し冷静になって見直すようにします… 良い教訓になりました。ありがとうございました。
guest

0

自己解決

ググるとRailsチュートリアルのテストをRSpecで書き換えてまとめている方のページが何件か見つかったので、それらを参考に少し書き方を変えて解決しました。
しかし上記の書き方での問題点が自分ではまだ理解できていないので、よろしければどなたか文法的な間違いの指摘と正しい表記法をご教授いただければ幸いです。

投稿2020/10/25 13:33

編集2020/10/25 13:36
da_ast

総合スコア7

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問