はじめに
RSpecの勉強中に{}ブロックがdo...endに変換されてしまって困った。その時の対処についてです。
症状
it "does not delete the project" do
sign_in @user
expect do #ココ
delete :destory, params: { id: @project.id }
end.to_not change(project, :count) #ココ
end
上記のコードを記述すると、画面遷移時にexpect{}と書いた部分がexpect do...endとなって RSpecを走らせることができなかった。
誤りについて
追記:2021/06/23
@jnchitoさんからコメントを頂きました。
上記の内容でエラーを再現したところ、問題なくRubocopが走ることを確認しました。
よく考えてみれば、rubocop自体は走った上で違反に引っかかっていただけの記憶もあります。となると上記の打ち消し線の表現は正しくありませんでした。
恐らくdo...endの部分で違反が指摘され、それがdo...endに原因があると思い込んでいたためと思います。
ご指摘頂いたように、どちらのブロック記法でも問題なく通ることが分かりましたので、下記の対処方法は今回のシーンにおいて必要ないことが分かりました。
次からは出力結果をもっと注意深く確認して、記事にはコードの詳細に触れていきたいと思います。
下記に関しては、上記との繋がりがなくなってしまいましたが一応残しておきたいと思います。
結論(誤り)
Rubocopのチェック対象から外して、とりあえず解決した。
Rubocopのチェック対象から外す
# 下記ファイルはチェックの対象から外す
Exclude:
- "Rakefile"
- "spec/rails_helper.rb"
- "spec/spec_helper.rb"
Rubocopを導入している前提となる。この設定をしてしまうと、他のフォーマットも動作しなくなるので根本の解決にはなっていないと思う。
Prettierの自動修正をやめる
"ruby.intellisense": "rubyLocate",
"ruby.useLanguageServer": true,
"ruby.lint": {
"rubocop": true
},
"ruby.format": "rubocop",
| コード | 説明 |
|---|---|
| "ruby.intellisense": "rubyLocate" | インテリセンスの設定 (ある程度、補完、定義ジャンプができるようになる) |
| "ruby.useLanguageServer": true | Language Server 使う (構文チェックしてくれるようになる) |
| "ruby.lint": { "rubocop": true } | Linter は rubocop |
| "ruby.format": "rubocop" | format は rubocop |
と
"editor.formatOnSave": true,
Prettierの導入と上記の記述をしている前提です。
1つの部分を削れば自動修正は行われない。全ファイルを対象にして自動修正したくなければ、"editor.formatOnSave": true,
ただこれもブロックだけを対象としているわけではないので、根本の解決になっていないと思う。