我在Heroku上有一个网站。出于搜索引擎优化的目的,我正试图严格使用我的裸域(https://example.com/)。
我发现这篇中等文章建议将此代码插入routes.rb
match '(*any)', to: redirect(subdomain: ''), via: :all, constraints: {subdomain: 'www'}
似乎是一个简单而有效的方法来处理重定向到Rails中的裸域。
然而,现在我所有的测试都失败了,提示:
Expected response to be a redirect to <http://www.example.com/> but was a redirect to <http://example.com/>.
和
Expected response to be a <2XX: success>, but was a <301: Moved Permanently> redirect to <http://example.com/>
我可以通过在页面加载的测试逻辑中用assert_response :redirect
替换assert_response :success
来解决这个问题。
我的问题是,将所有的测试更改为assert_response :response
是最佳实践吗?或者是否有一种更简单的方法来配置Rails 6中的裸域重定向,而不会干扰测试逻辑?
测试示例:
test "should get example page" do
get example_path
assert_response :success
end
Routes.rb
root to: "site#index"
get "example", to: "site#example
问题是用于rails测试的默认URL恰好是www.example.com
,它正在击中您的路由。
在这里查看更多详细信息如何更改默认"www.example.com"在rails中测试的领域?
这会击中你的重定向路由。更改默认主机以删除www
,它应该可以解决问题,例如
controller.request.host = "example.com"