RailsのRSpecを初めて試した時に調べたことをメモしておきます。
少しでも役に立てればと。
実行方法
ディレクトリ指定
rspec spec/models/
ファイル指定
rspec spec/models/user_spec.rb
行指定
rspec spec/models/user_spec.rb:12
全実行
※DBのデータが削除されるので、注意。
rake spec
RSpec書き方
マッチャ
eq
期待値と実際の値が「等しい」かどうかを検証する場合は eq を使う。
expect(1 + 3).to eq 3
expect(1 + 2).not_to eq 1
# または
expect(1 + 2).to_not eq 1
be
等号・不等号と組み合わせて、値の大小を検証するときによく使われる。
expect(1 + 2).to be >= 3
テストコードのDRY
テストコードの期待値はDRYを捨ててベタ書きする ~テストコードの重要な役割とは?~
出力フォーマット
-
--color
- 色付け
-
--profile
- テストごとの処理時間を出力
-
--format d
- example (it)に記述したコメントをテスト結果に表示
rspec --color --profile --format d spec/XXXXX_rspec.rb
.rspecに事前に書いておけば、コマンドを省略できる。
.rspec
--color --profile --format d
pedningにする
テストする必要があるが、とりあえずテストにエラーを出したくない時に活用
spec.rb
xit "assigns users as @users" do
end
result
Accounting::MemberController GET index assigns users as @users
# Temporarily disabled with xit
参考
Rspec の pending と skip って何が違うの?
つまずいたこと
PG::Error: ERROR: permission denied
テスト実行時に以下エラー発生。
Failure/Error: Unable to find matching line from backtrace
ActiveRecord::StatementInvalid:
PG::Error: ERROR: permission denied: "RI_ConstraintTrigger_c_1196635" is a system trigger
DBにアクセスユーザの権限レベルを上げれば良い
ALTER USER user_name with SUPERUSER;
参考
Postgres system triggers error: permission denied