【问题标题】:How testing an url with params in Cuba?如何在古巴使用参数测试 url?
【发布时间】:2015-02-22 12:28:08
【问题描述】:

按照https://github.com/soveran/cuba#usage 上的示例并稍作改动:

Cuba.define do
  on get do
    on 'home' do
      res.write "Aloha!"
    end
  end
  on 'api' do
    on get do
      on "home", params("a"), param("b") do |a,b|
        res.write "Hello World!"
      end
    end
  end
end

测试:

scope do
  test "Homepage" do
    get "/api/home?a=00&b=11"
    assert_equal "Hello World!", last_response.body
  end
end

但我得到一个断言失败:

AppTest.rb:15:in `block (2 levels) in <main>': "Hello world!" != "" (Cutest::AssertionFailed)

好像我在测试中使用的url不正确。应该怎么改?

更新:

我注意到,如果我更改定义,那么它可以正常工作:

Cuba.define do
  on 'api' do
    on get do
      on "home", params("a"), param("b") do |a,b|
        res.write "Hello World!"
      end
    end
  end
  on get do
    on 'home' do
      res.write "Aloha!"
    end
  end
end

【问题讨论】:

    标签: cuba


    【解决方案1】:

    我建议您以不同的方式构建您的路线,以保持清洁和可维护。

    例如,你可以这样做:

    class API < Cuba
      on get, root do
        res.write("foo")
      end
    end
    
    class Web < Cuba
      on get, "home" do
        res.write("bar")
      end
    end
    
    Cuba.define do
      on "api" do
        run API
      end
    
      on default do
        run Web
      end
    end
    

    另外,请记住,当您使用 param 匹配器时,您是在说参数必须在那里才能匹配路由。有时这就是你想要的。但是,如果查询参数是可选的,您可以通过req 访问它:

    on get, "home" do
      foo = req.GET["foo"]
    
      res.write(foo)
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多