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>'
ブロックの部分の書き方が間違っているのでしょうが、正しい記法がわかりません。
とても初歩的な質問だと思うのですが、どなたか教えていただけませんでしょうか。
回答2件
あなたの回答
tips
プレビュー