如何在古巴测试带有参数的网址?

时间:2015-02-22 12:28:09

标签: cuba

按照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)

就像我在测试中使用的网址不对。我该怎么改变它?

更新

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

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

1 个答案:

答案 0 :(得分:2)

我建议你以不同的方式构建你的路线,以保持干净和可维护。

例如,你可以这样做:

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