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

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

ただいまの
回答率

91.01%

  • Ruby

    6374questions

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

  • Ruby on Rails

    6206questions

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

[Rails5]統合テストのエラー、実際ちゃんと動いてるように見えるのですが...。

受付中

回答 0

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 184
退会済みユーザー

退会済みユーザー

 統合テストがエラーになってしまいました。

今まで全部通っていたのですが、何かしら変えたことによって
統合テストがエラーになってしまいました。原因がわからず困っています。
実際、$r s で動かすとDBもしっかり動いているように見えます。
フォームエラーによって同じフォームが表示されていたりします。
テストの★のつく箇所がエラー箇所です。本当かな...。

文法上の問題等、教えていただけると幸いです...。

 要約(更新中)

 but rendering with <[]>になってしまうのがおかしい。 → 表示されてるのに。
 "User.count" didn't change by 1.になってしまうのがおかしい。 → 増えてるのに。

 エラー内容

FAIL["test_ユーザ登録失敗時テスト", UsersSignupTest, 4.637436497000181]
 test_ユーザ登録失敗時テスト#UsersSignupTest (4.64s)
        expecting <"user/users/new"> but rendering with <[]>
        test/integration/users_signup_test.rb:13:in `block in <class:UsersSignupTest>'

 FAIL["test_ユーザ登録失敗時メッセージテスト", UsersSignupTest, 4.914939696000147]
 test_ユーザ登録失敗時メッセージテスト#UsersSignupTest (4.91s)
        expecting <"user/users/new"> but rendering with <[]>
        test/integration/users_signup_test.rb:21:in `block in <class:UsersSignupTest>'

 FAIL["test_ユーザ登録成功時テスト", UsersSignupTest, 5.075468785999874]
 test_ユーザ登録成功時テスト#UsersSignupTest (5.08s)
        "User.count" didn't change by 1.
        Expected: 35
          Actual: 34
        test/integration/users_signup_test.rb:26:in `block in <class:UsersSignupTest>'

 FAIL["test_ユーザ登録成功時フラッシュテスト", UsersSignupTest, 5.2429648319998705]
 test_ユーザ登録成功時フラッシュテスト#UsersSignupTest (5.24s)
        "User.count" didn't change by 1.
        Expected: 35
          Actual: 34
        test/integration/users_signup_test.rb:57:in `block in <class:UsersSignupTest>'

 controller

class User::UsersController < User::Base
    before_action :logged_in_user,only:[:index]

    def new
        @user = User.new
    end

    def create
        @user = User.new(user_params)
        if @user.save
            @user.send_activation_email
      flash[:info] = "ユーザ本登録メールを送信しました。ご確認ください。"
      redirect_to [:user,:root]
        else
            render 'new'
        end
    end

    private

    def user_params
        params.require(:user).permit(    :name,:email,:gender,:birth_year,
                                                                     :password,:password_confirmation)
    end
end

 テスト

require 'test_helper'
class UsersSignupTest < ActionDispatch::IntegrationTest

    def setup
        ActionMailer::Base.deliveries.clear
    end

    test "ユーザ登録失敗時テスト" do
      get user_signup_path
        assert_no_difference 'User.count' do
            post user_signup_path,params:{user:{name:"",email:'invalid@email',password:'foo',password_confirmation:'bar',gender:1,birth_year:'1992'}}
        end
★        assert_template 'user/users/new'
    end

    test "ユーザ登録失敗時メッセージテスト" do
      get user_signup_path
        assert_no_difference 'User.count' do
            post user_signup_path,params:{user:{name:'invalid',email:'invalid@',password:'foo',password_confirmation:'bar',gender:1,birth_year:1992}}
        end
★        assert_template 'user/users/new'
        assert_select 'div#error_explanation'
    end
    test "ユーザ登録成功時テスト" do
      get  user_signup_path
★        assert_difference 'User.count',1 do
            post user_signup_path,params:{user:{name:"ExampleUser",email:'example@example.com',gender:1,birth_year:1992,password:'password',password_confirmation:'password'}}
        end

        assert_equal 1, ActionMailer::Base.deliveries.size
        user = assigns(:user)
        assert_not user.activated?

        # 本登録していない状態でログイン
        log_in_as(user)
    assert_not is_logged_in?

        # 有効化トークン不正時
        get edit_user_account_activation_path("invalid token", email: user.email)
    assert_not is_logged_in?

        # 有効化トークンは正しいがアドレスが無効時
    get edit_user_account_activation_path(user.activation_token, email: 'wrong')
    assert_not is_logged_in?

        # 有効化トークンが正しい場合
     get edit_user_account_activation_path(user.activation_token, email: user.email)
     assert user.reload.activated?
     follow_redirect!
     assert_template 'user/static_pages/index'
     assert is_logged_in?


    end
    test "ユーザ登録成功時フラッシュテスト" do
      get  user_signup_path
★        assert_difference 'User.count',1 do
            post user_signup_path,params:{user:{name:"ExampleUser",email:'example@example.com',gender:1,birth_year:1992,password:'password',password_confirmation:'password'}}
        end
        follow_redirect! # POSTリク送信後、指定に移動するメソ
        assert_template 'user/static_pages/index'
        assert_not flash.empty?
    end



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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

まだ回答がついていません

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

  • ただいまの回答率 91.01%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Ruby

    6374questions

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

  • Ruby on Rails

    6206questions

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