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

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

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

Deviseとは、Ruby-on-Railsの認証機能を追加するプラグインです。

RSpec

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

Ruby on Rails

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

Q&A

解決済

2回答

4477閲覧

system test で devise の sign_in メソッドを使いたい

naserehari

総合スコア35

Devise

Deviseとは、Ruby-on-Railsの認証機能を追加するプラグインです。

RSpec

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

Ruby on Rails

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

0グッド

0クリップ

投稿2020/07/24 16:33

前提・実現したいこと

system spec で sign_in メソッドが使えません。
request spec や view spec では使えています。

ruby

1# spec/system/companies_spec.rb 2require 'rails_helper' 3 4RSpec.feature 'Companies', type: :system, js: true do 5 before do 6 sign_in create(:user) 7 end

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

NoMethodError: undefined method `sign_in' for #<RSpec::ExampleGroups::Companies::Nested:0x00007fd862c1a1c8>

補足情報

ヘルパーの指定は以下のようになっています。

ruby

1# spec/support/devise.rb 2RSpec.configure do |config| 3 config.include Devise::Test::IntegrationHelpers, type: :request 4 config.include Devise::Test::ControllerHelpers, type: :view 5end

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

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

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

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

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

guest

回答2

0

config.include Devise::Test::IntegrationHelpers, type: :system
を追加することでsystem specでもsign_inメソッドを使用することが可能になると思います。

Step 3: Specify the below helpers in the RSpec.configure do |config| block of your rails_helper.rb to make sure that the sign_in method is used to login the user into your app before testing the specific feature of your app which requires a signed in user

setup_system_tests_with_rspec_devise_rails6.md

投稿2021/10/22 02:27

編集2021/10/22 02:29
yuki414

総合スコア2

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

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

naserehari

2021/10/23 06:09

出来ました! ありがとうございます ^_^
guest

0

ベストアンサー

System spec は基本的に結合テストでブラックボックステストなので、内部実装 ( sign_in のようなメソッドを使わずにテストするものかと思います。

サインイン状態にしたければ基本的には、クリックや入力をしてユーザーと同じような操作をさせるような形です
Capybara を使っているのであれば

before do click('ログインする') fill_in('email', with: 'email@example.com') fill_in('password', with: 'password') click('ログイン') end

のような形でしょうか、毎回使うのであれば shared_context にして共通化等するべきかと思います。

投稿2020/07/24 16:44

unhappychoice

総合スコア1531

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

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

naserehari

2020/07/24 17:18

確かにそうですね。なるほど、 `shared_context` があるのか。 毎回使いそうなのでそれでやってみます。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問