我添加了应用程序国家/地区分开的内容。国家/地区在应用程序中通过子域名设置IP地址。
before_action :check_domain
def check_domain
redirect_to(subdomain: current_country.slug) unless Country.find_by(slug: request.subdomain)
end
我已经为我的application_controller添加了这个,以便从他们的IP addresess重定向用户的正确国家/地区(如果url已经没有子域名)。在工作正常,但很多我的规格因为它错(没有重定向每个规格传递)。例如规范:
需要“rails_helper”
describe "Update user's preferred subjects", type: :request do
let!(:video) { create(:video, :with_tags, tags: ["math"]) }
let!(:related_video) { create(:video, :with_tags, tags: ["math"], subject: video.subject) }
let!(:related_survey) { create(:survey, :with_tags, tags: ["math"], subject: video.subject) }
it "responds with related materials" do
get("/videos/#{video.id}/related_materials.json")
expect(response_body.keys).to match_array(%w(videos offline_materials surveys meta))
expect(response_body).to eq_serialized(
RelatedMaterialsQuery.new(video, {}),
serializer: RelatedMaterialsSerializer
)
end
end
我有一个错误:
JSON::ParserError:
784: unexpected token at '<html><body>You are being <a href="http://guyana-1.example.com/videos/1/related_materials">redirected</a>.</body></html>'
我应该在rspec中更改哪些内容才能通过它?由于重定向到国家/地区子域,它试图解析html而不是json。我该怎么解决?感谢。
答案 0 :(得分:1)
请求后使用follow_redirect!
可以解决问题。
describe "Update user's preferred subjects", type: :request do
let!(:video) { create(:video, :with_tags, tags: ["math"]) }
let!(:related_video) { create(:video, :with_tags, tags: ["math"], subject: video.subject) }
let!(:related_survey) { create(:survey, :with_tags, tags: ["math"], subject: video.subject) }
before do
get("/videos/#{video.id}/related_materials.json")
follow_redirect!
end
it "responds with related materials" do
expect(response_body.keys).to match_array(%w(videos offline_materials surveys meta))
expect(response_body).to eq_serialized(
RelatedMaterialsQuery.new(video, {}),
serializer: RelatedMaterialsSerializer
)
end
end
但是,如果没有国家/地区,我建议您测试一次请求被重定向到正确的域名。在所有其他测试中,预创建Country
以转义重定向或简单地存根check_domain
方法。
答案 1 :(得分:0)
您可以手动修改request.host
以避免重定向。