我将尝试编写一些rspec集成测试来验证我的条件路由是否正确路由,但我遇到了许多问题。
在routes.rb文件中:
root :to => "error#ie6", :constraints => {:user_agent => /MSIE 6/}
root :to => "protocol_sets#index", :constraints => UserRoleConstraint.new(/doctor/i)
root :to => "refill_requests#create", :constraints => UserRoleConstraint.new(/member/i)
root :to => "refill_requests#create", :constraints => {:subdomain => "demo"}
root :to => "site#index"
在spec/requests/homepage_routing_spec.rb文件中
require 'spec_helper'
describe "User Visits Homepage" do
describe "Routings to homepage" do
it "routes / to site#index when no session information exists" do
visit root_path
end
end
end
当我尝试运行测试时,出现以下错误。
失败:
1)用户访问主页路由到主页路由/到site#index时不存在会话信息 Failure/Error: visit root_path NoMethodError: NilClass的未定义方法'match' #:10:“同步” #./spec/requests/homepage_routings_spec.rb:6:in `block (3 levels) in'
耗时0.08088秒 1个示例,1个失败
失败的示例:
rspec ./spec/requests/homepage_routings_spec.rb:5 # User Visits Homepage Routings to homepage routes / to site#index when no session information exists
从谷歌搜索来看,我猜测 rspec/capybara 处理条件路由可能存在问题。
是否有办法使用 rspec 和 capybara 测试路由上的约束?
allow_any_instance_of(UserRoleConstraint).to receive(:matches?).and_return { true }
。 - dkniffin