Sinatra - 测试config.ru映射

时间:2016-02-11 09:23:20

标签: ruby rspec sinatra cucumber

我是ruby和sinatra的新手。我有一个sinatra应用程序,在config.ru

下面的映射
map "/xyz" do
run lambda { |env|
    if env["PATH_INFO"] != "/"
      A::B.call(env)
    else
      C::D.call(env.merge("PATH_INFO" => "/xyz/"))
    end
  }
end

我正在尝试编写一个测试来检查是否调用了正确的应用程序。

When I visit the URL "<url>" 
And  "<engine>" is used
Examples:
| url       | engine  | 
| /xyz/     | C::D    | 
| /xyz/abc/ | A::B    |

并在步骤

step ":engine is used" do |engine|
  expect(engine.constantise).to receive(:call)
end

但步骤失败了。有没有更好的方法来测试这个?我尝试调试这个并确认sinatra map和call被调用。

该页面尚不存在。这就是为什么我试图测试路线而不是响应。

提前致谢。

1 个答案:

答案 0 :(得分:0)

我可以通过在调用url之前添加expection来解决这个问题,如下所示

expect(engine.constantize).to receive(:call).and_call_original
get @url