Rails 5 个测试弃用警告

Rails 5 deprecation warning for tests

我正在尝试从 rails 4.2.6 更新到 rails 5.0.0.1,但在 运行 我的测试时收到以下警告:

DEPRECATION WARNING: ActionController::TestCase HTTP request methods will accept only keyword arguments in future Rails versions.

Examples:

get :show, params: { id: 1 }, session: { user_id: 1 } process :update, method: :post, params: { id: 1 } (called from block in at /home/ubuntu/workspace/my_app/test/controllers/tractions_controller_test.rb:25)

我一直在进行适当的更改以适应这一变化。但是对于下面的集成测试行,我不知道如何正确更改它:

delete api_sessions_path, { api_session: { org_id: nil } }, { "HTTP_API_TOKEN": "token", "HTTP_USER_EMAIL": @user.email }

因此测试通过但带有弃用警告。如果我将其更改为下面的两个选项,测试将因语法错误而失败。如何正确调线?

delete api_sessions_path, params: { api_session: { org_id: nil } }, { "HTTP_API_TOKEN": "token", "HTTP_USER_EMAIL": @user.email }
delete api_sessions_path, params: { { api_session: { org_id: nil } }, { "HTTP_API_TOKEN": "token", "HTTP_USER_EMAIL": @user.email } }

Update:我也尝试过使用 session 和下面的选项,但会产生错误 ArgumentError: unknown keyword: session.

delete api_sessions_path, session: { api_session: { org_id: nil } }, params: { "HTTP_API_TOKEN": "token", "HTTP_USER_EMAIL": @user.email }
delete api_sessions_path, params: { api_session: { org_id: nil } }, session: { "HTTP_API_TOKEN": "token", "HTTP_USER_EMAIL": @user.email }
delete api_sessions_path, params: { "HTTP_API_TOKEN": "token", "HTTP_USER_EMAIL": @user.email }, session: { api_session: { org_id: nil } }
delete api_sessions_path, session: { api_session: { org_id: nil } }, { "HTTP_API_TOKEN": "token", "HTTP_USER_EMAIL": @user.email }

我找到了解决方案。必须添加 headers 标签:

delete api_sessions_path, params: { api_session: { org_id: nil } }, headers: { "HTTP_API_TOKEN": "token", "HTTP_USER_EMAIL": @user.email }