t11hi

hene

The success? predicate is deprecated and will be removed in Rails 6.0. への対応

The success? predicate is deprecated and will be removed in Rails 6.0. への対応

の続き。

テストは落ちなくなりましたが、WARNING が出ていました。 こちらは、WARNING 対応時のメモです。

WARNING

DEPRECATION WARNING: The success? predicate is deprecated and will be removed in Rails 6.0. Please use successful? as provided by Rack::Response::Helpers. (called from block (8 levels) in <top (required)> at /home/circleci/project/spec/requests/sample.rb:13)

Rails 6.0 で、success? が削除されるので非推奨みたいです。

対応方法

-  it { is_expected.to be_success }
+  it { is_expected.to be_successful }

のように be_success を使わないように修正すると WARNING が消えました。


以下のコードでも同様の WARNING が出ていました。

  it "success" do
    get :index
    expect(response).to have_http_status(:success)
  end

have_http_status(:success)have_http_status(:successful) に変更すると、

  it "success" do
    get :index
    expect(response).to have_http_status(:successful)
  end

下記のようなエラーが出ました。

  ArgumentError:
    Invalid HTTP status: :successful
  # ./spec/controllers/sample.rb:7:in `block (3 levels) in <top (required)>'

そこで、success を使わないように書き直しました。

  subject { get :index }
  context "success" do
    it { is_expected.to be_successful }
  end

WARNING が出ないようになりました!


これでも良かったです。

  it "success" do
    get :index
    expect(response).to have_http_status 200
  end

参考