ruby-on-rails-3 – 测试路由时没有请求参数约束
发布时间:2020-12-17 02:12:37 所属栏目:百科 来源:网络整理
导读:当我在实践中运行它时它可以工作,但我似乎无法使用rspec为我的路由约束编写一个工作测试. 当测试运行时,触发约束,但请求参数为空,因此它不会验证并且测试失败. 我正在运行Rails 3.0.9,rspec-rails 2.6.1和rspec 2.6.0. 配置/ routes.rb中 match ":param1-uni
当我在实践中运行它时它可以工作,但我似乎无法使用rspec为我的路由约束编写一个工作测试.
当测试运行时,触发约束,但请求参数为空,因此它不会验证并且测试失败. 我正在运行Rails 3.0.9,rspec-rails 2.6.1和rspec 2.6.0. 配置/ routes.rb中 match ":param1-unique-:param2" => "controller#index",:constraints => ParamConstraint.new LIB / param_constraint.rb class ParamConstraint def matches?(request) @request ||= request valid_param1? && valid_param2? end def valid_param1? @request.params[:param1] == "lorem" end def valid_param2? @request.params[:param2] == "ipsum" end end 规格/路由/ param_constraint_spec.rb require 'spec_helper' describe "param constraint routing" do it "recognizes route for param1 and param2" do { :get => "/lorem-unique-ipsum" }. should route_to( :controller => "controller",:action => "index",:param1 => "lorem",:param2 => "ipsum" ) end end 更新 如果我在约束中检查请求,我得到以下输出: #<ActionDispatch::Request:0x007fee140ff910 @env={ "rack.version"=>[1,1],"rack.input"=>#<StringIO:0x007fee1446da48>,"rack.errors"=>#<StringIO:0x007fee1446e768>,"rack.multithread"=>true,"rack.multiprocess"=>true,"rack.run_once"=>false,"REQUEST_METHOD"=>"GET","SERVER_NAME"=>"example.org","SERVER_PORT"=>"80","QUERY_STRING"=>"","PATH_INFO"=>"/lorem-unique-ipsum","rack.url_scheme"=>"http","HTTPS"=>"off","SCRIPT_NAME"=>"","CONTENT_LENGTH"=>"0" }> 解决方法
我今天遇到了同样的问题,正在寻找一个回答我的问题.对于它的价值,我不得不求助于编写请求规范.
context "passing params that satisfy ParamConstraint" do before do visit "/lorem-unique-ipsum" end it "should serve up a page with content" do # replace this with some assertion that gets satisfied by # pages served up when ParamConstraint.new.matches? returns true page.should have_selector("html body div#foo") page.should_not have_selector("html body div#bar") end end context "passing params that DO NOT satisfy ParamConstraint" do before do visit "/other-unique-other" end it "should serve up a page with different content" do # replace this with some assertion that gets satisfied by # pages served up when ParamConstraint.new.matches? returns false page.should_not have_selector("html body div#foo") page.should have_selector("html body div#bar") end end 这不能回答你的问题,我认为这是“如何测试路由约束”,因为正确的方法是通过路由规范.但是考虑到当你使用“should route_to”时request.params的工作方式存在这种差距,这是一种解决方法.与路由规范相反,请求规范将正确填充request.params. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |