-
Notifications
You must be signed in to change notification settings - Fork 111
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
base: develop
Are you sure you want to change the base?
Conversation
spec/system/task_spec.rb
Outdated
describe 'タスクの表示' do | ||
let(:user) { create(:user) } | ||
let(:user_another) { create(:user, email: '[email protected]') } | ||
let!(:task){ create(:task, :user_id => user.id) } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
HashRocket は直しておきましょう!
spec/system/task_spec.rb
Outdated
context '正常系' do | ||
let(:user) { create(:user) } | ||
let(:task) { build(:task, title: 'task_new') } | ||
let!(:task_created){ create(:task, :user_id => user.id) } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
HashRocket直しておきましょう!
There was a problem hiding this 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
spec/system/task_spec.rb
Outdated
end | ||
end | ||
context '異常系' do | ||
it 'マイページにユーザーが新規作成したタスクが表示されること' do |
There was a problem hiding this comment.
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 |
There was a problem hiding this comment.
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 |
There was a problem hiding this comment.
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 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
編集、削除 はテストケースにないと思います。また itで確認するケースは1観点にしましょう。
(ケースが複数あると、該当のテストが失敗した時に何の機能が失敗したかが読み取れないため)
There was a problem hiding this comment.
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 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
追加したタスク内容が一覧画面上に表示されていることも併せて確認してください
(DBにデータが登録されたことの確認)
spec/system/task_spec.rb
Outdated
@@ -0,0 +1,74 @@ | |||
require 'rails_helper' | |||
|
|||
RSpec.describe 'Users', type: :system do |
There was a problem hiding this comment.
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 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
画面遷移系のテストケースでは current_path
の確認もお願いします!
spec/system/user_spec.rb
Outdated
describe 'サインアップ' do | ||
context '正常系' do | ||
let(:user) { build(:user) } | ||
let(:user_created) { create(:user) } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ここのテストケースでは意図的に ! にしていない感じでしょうか?
Taskのケースと統一した方が可読性があると思います。
describe, context, itの構成については、下記のURLを参考にしてください! |
spec/system/task_spec.rb
Outdated
context 'ログインした状態' do | ||
let(:user) { create(:user) } | ||
let(:task) { build(:task, title: 'task_new') } | ||
let(:task_created){ create(:task, user_id: user.id) } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
この let(:task_created)
は使用されていないと思います!
spec/system/task_spec.rb
Outdated
end | ||
let(:user) { create(:user) } | ||
let(:user_another) { create(:user, email: '[email protected]') } | ||
let(:task){ create(:task, user_id: user.id) } |
There was a problem hiding this comment.
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' |
There was a problem hiding this comment.
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として使われていることに気をつける必要があります。
There was a problem hiding this 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 |
There was a problem hiding this comment.
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
と記載しても動作します。
また、現場によってはこの部分も日本語で記載することもあるようです。
今回はこのままで問題ありません。
spec/system/user_spec.rb
Outdated
end | ||
end | ||
context '入力値が異常な状態' do | ||
it 'ユーザーの編集ができるないこと' do |
There was a problem hiding this comment.
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) } |
There was a problem hiding this comment.
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) } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
letの定義とdescribeは1行空けた方が見やすいです
spec/spec_helper.rb
Outdated
# 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 |
There was a problem hiding this comment.
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
をつけないテストケースは実行されなくなります。(何もつけなければ、何も実行されなくなってしまいます)
spec/spec_helper.rb
Outdated
# 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 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
config.order = :random
を有効化すると実行するテストケースの順番をランダムにできます。
(今回は対応不要です。)
There was a problem hiding this 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以下に作成してください。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
追加ですみません!
下記のテストケースも対応をお願いしたいです🙇♂️
- 登録済メールアドレスでユーザー新規作成ができないこと
- 登録済メールアドレスでユーザー編集ができないこと
- 他ユーザーのユーザー編集ページに遷移できないこと
概要
タスクとユーザーに関するsystem specを下記のテストケースで作成
[正常系]
・ログインが成功すること
・ユーザーの新規作成、編集、削除ができること
・ログインした状態でタスクの新規作成、編集、削除ができること
・マイページにユーザーが新規作成したタスクが表示されること
[異常系]
・未入力時にログインが失敗すること
・未入力時にユーザーの新規作成が失敗すること
・ログインしていないユーザーでタスクの新規作成、編集、マイページへの遷移ができないこと
・他のユーザーのタスク編集ページへの遷移ができないこと
※ 各Controller毎にsystem specを作成し、アクション毎にdescribeを作成してください。
※ loginメソッドはmoduleを作成し、specファイル間で共通に呼び出せるようにしてください。
確認
rspecを実行し、failures 0 を確認
修正後のdescribe, context
※ 修正前のdescribe, context