Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

課題16 system spec作成 #1

Open
wants to merge 33 commits into
base: develop
Choose a base branch
from
Open

課題16 system spec作成 #1

wants to merge 33 commits into from

Conversation

denkikairo
Copy link
Owner

@denkikairo denkikairo commented Oct 8, 2019

概要

タスクとユーザーに関するsystem specを下記のテストケースで作成

[正常系]
・ログインが成功すること
・ユーザーの新規作成、編集、削除ができること
・ログインした状態でタスクの新規作成、編集、削除ができること
・マイページにユーザーが新規作成したタスクが表示されること

[異常系]
・未入力時にログインが失敗すること
・未入力時にユーザーの新規作成が失敗すること
・ログインしていないユーザーでタスクの新規作成、編集、マイページへの遷移ができないこと
・他のユーザーのタスク編集ページへの遷移ができないこと

※ 各Controller毎にsystem specを作成し、アクション毎にdescribeを作成してください。
※ loginメソッドはmoduleを作成し、specファイル間で共通に呼び出せるようにしてください。

確認

rspecを実行し、failures 0 を確認

修正後のdescribe, context
image
image

※ 修正前のdescribe, context
image
image

@denkikairo denkikairo changed the title System spec 課題16 system spec作成 Oct 8, 2019
describe 'タスクの表示' do
let(:user) { create(:user) }
let(:user_another) { create(:user, email: '[email protected]') }
let!(:task){ create(:task, :user_id => user.id) }
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

HashRocket は直しておきましょう!

context '正常系' do
let(:user) { create(:user) }
let(:task) { build(:task, title: 'task_new') }
let!(:task_created){ create(:task, :user_id => user.id) }
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

HashRocket直しておきましょう!

Copy link
Contributor

@yuji91 yuji91 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Specの実行結果のキャプチャは下記の記事を参考にして成功例を再度添付して頂きたいです🙇‍♂️
https://shinkufencer.hateblo.jp/entry/2019/01/21/233000

end
end
context '異常系' do
it 'マイページにユーザーが新規作成したタスクが表示されること' do
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

この itの文章では、異常系として確認している内容を読み取れないので確認内容と対比させて欲しいです!

fill_in 'task_title', with: 'title updated'
click_button 'Update Task'
expect(page).to have_content 'Task was successfully updated.'
end
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

編集した内容の項目が画面上に表示されていることも合わせて確認してください
(更新処理が正しく行われているか)

click_on 'Destroy'
page.driver.browser.switch_to.alert.accept
expect(page).to have_content 'Task was successfully destroyed.'
end
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

削除した結果、DBから該当のデータが消えていることも確認してください

fill_in 'user_password_confirmation', with: user.password_confirmation
click_button 'SignUp'
expect(page).to have_content 'User was successfully created.'
end
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

編集、削除 はテストケースにないと思います。また itで確認するケースは1観点にしましょう。
(ケースが複数あると、該当のテストが失敗した時に何の機能が失敗したかが読み取れないため)

Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

編集と削除を忘れていました

fill_in 'task_deadline', with: task.deadline
click_button 'Create Task'
expect(page).to have_content 'Task was successfully created.'
end
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

追加したタスク内容が一覧画面上に表示されていることも併せて確認してください
(DBにデータが登録されたことの確認)

@@ -0,0 +1,74 @@
require 'rails_helper'

RSpec.describe 'Users', type: :system do
Copy link
Contributor

@yuji91 yuji91 Oct 9, 2019

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

'Users' ではなく 'Tasks' が正しいです!

it 'ログインしていない状態でタスクのマイページに遷移できない' do
visit user_path(user)
expect(page).to have_content 'Login required'
end
Copy link
Contributor

@yuji91 yuji91 Oct 10, 2019

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

画面遷移系のテストケースでは current_path の確認もお願いします!

describe 'サインアップ' do
context '正常系' do
let(:user) { build(:user) }
let(:user_created) { create(:user) }
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ここのテストケースでは意図的に ! にしていない感じでしょうか?
Taskのケースと統一した方が可読性があると思います。

@yuji91
Copy link
Contributor

yuji91 commented Oct 10, 2019

describe, context, itの構成については、下記のURLを参考にしてください!
https://qiita.com/uchiko/items/d34c5d1298934252f58f

context 'ログインした状態' do
let(:user) { create(:user) }
let(:task) { build(:task, title: 'task_new') }
let(:task_created){ create(:task, user_id: user.id) }
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

この let(:task_created) は使用されていないと思います!

end
let(:user) { create(:user) }
let(:user_another) { create(:user, email: '[email protected]') }
let(:task){ create(:task, user_id: user.id) }
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

94, 95行目で既に定義しているので105, 107行目のletは不要ですね。

fill_in 'task_content', with: task.content
select task.status, from: 'task_status'
fill_in 'task_deadline', with: task.deadline
click_button 'Create Task'
Copy link
Contributor

@yuji91 yuji91 Oct 11, 2019

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

build状態のletで作成したオブジェクトのカラムを使うより、文字列でそのまま定義した方がletの使い勝手が向上します。
この場合だと、全体のletの中で新規作成のtaskのみcreateではなくbuildとして使われていることに気をつける必要があります。

Copy link
Contributor

@yuji91 yuji91 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

spec全体で使うletはプロジェクトの一番上にまとめた方が何度も定義せずに済みますね。

RSpec.describe 'Tasks', type: :system do
  let(:user) { create(:user) }
  let(:user_another) { create(:user, email: '[email protected]') }
  let(:task) { create(:task, title: 'task_new', user_id: user.id) }
  let(:task_created){ create(:task, user_id: user.id) }

@@ -0,0 +1,116 @@
require 'rails_helper'

RSpec.describe 'Tasks', type: :system do
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

細かい点ですが RSpec.describe Task, type: :system do と記載しても動作します。
また、現場によってはこの部分も日本語で記載することもあるようです。
今回はこのままで問題ありません。

end
end
context '入力値が異常な状態' do
it 'ユーザーの編集ができるないこと' do
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

できないこと に直しておいてください

require 'rails_helper'

RSpec.describe 'Users', type: :system do
let(:user) { create(:user) }
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

letの定義とdescribeは1行空けた方が見やすいですね

RSpec.describe 'Tasks', type: :system do
let(:user) { create(:user) }
let(:user_another) { create(:user, email: '[email protected]') }
let(:task){ create(:task, user_id: user.id) }
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

letの定義とdescribeは1行空けた方が見やすいです

# is tagged with `:focus`, all examples get run. RSpec also provides
# aliases for `it`, `describe`, and `context` that include `:focus`
# metadata: `fit`, `fdescribe` and `fcontext`, respectively.
config.filter_run_when_matching :focus
Copy link
Contributor

@yuji91 yuji91 Oct 11, 2019

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

config.filter_run_when_matching :focus を有効化すると fit でそのテストケースにforcusして実行できます。

また config.filter_run :focus を記載すると fit をつけないテストケースは実行されなくなります。(何もつけなければ、何も実行されなくなってしまいます)

# order dependency and want to debug it, you can fix the order by providing
# the seed, which is printed after each run.
# --seed 1234
config.order = :random
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

config.order = :random を有効化すると実行するテストケースの順番をランダムにできます。
(今回は対応不要です。)

Copy link
Contributor

@yuji91 yuji91 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

細かい点の修正と、後1点対応をお願いします。
・テスト実行時のブラウザをheadless_chromeとchromeで切り替える設定ファイルをsupport以下に作成してください。

Copy link
Contributor

@yuji91 yuji91 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

追加ですみません!
下記のテストケースも対応をお願いしたいです🙇‍♂️

  • 登録済メールアドレスでユーザー新規作成ができないこと
  • 登録済メールアドレスでユーザー編集ができないこと
  • 他ユーザーのユーザー編集ページに遷移できないこと

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants