rspec subjectの使い方について質問させてください!
rails でアプリケーションを作っており現時点でspecテストは通っているのですが、リファクタリングしたいです。
subjectによって、処理を変数に置き換えて使っています。
xsubjectの使い方はあっていますか?
it 節でsubject を呼び出さないようにしたいのですが、どのように修正すれば良いですか?
notes_request_spec.rb
require 'rails_helper' RSpec.describe "Notes", type: :request do let(:user) { FactoryBot.create(:user, :all_authorized) } let(:note) { FactoryBot.create(:note) } describe "POST #create" do before { log_in_as(user) } subject { post notes_path, params: params } context "valid request" do let(:params) { { note: { title: "note_title_spec", contents: "note_contents_spec" } } } it { expect { subject }.to change { Note.count }.by(1) } it "flash message" do subject # it 節内でsubject を呼び出さないようにしたい expect(flash[:success]).to match(/New note created!/) end it "redirect to" do subject # it 節内でsubject を呼び出さないようにしたい expect(response).to have_http_status(302) end end end
また、以下のコードでテストが通らなくなる理由を教えていただきたいです。
notes_request_spec.rb
require 'rails_helper' RSpec.describe "Notes", type: :request do let(:user) { FactoryBot.create(:user, :all_authorized) } let(:note) { FactoryBot.create(:note) } describe "POST #create" do before { log_in_as(user) } context "valid request" do subject { post notes_path, params: params } # subject を定義 let(:params) { { note: { title: "note_title_spec", contents: "note_contents_spec" } } } it { expect { subject }.to change { Note.count }.by(1) } it "flash message" do #RED expect(flash[:success]).to match(/New note created!/) end it "redirect to" do #RED expect(response).to have_http_status(302) end end end
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2021/02/02 10:57