问题是这get /unknown_path'实际上并没有引发错误——它只是接收到一个 404 请求。
来自Sinatra:自述文件
每当从路由块或过滤器引发异常时,都会调用错误处理程序。异常对象可以从sinatra.errorRack 变量中获取...
您的测试是在测试一个实际的错误(这是做什么raise_error的),而 Sinatra 正在压缩错误——否则,每次有人 404 时服务器都会崩溃!
查看Sinatra 测试指南以更好地指导您的测试。基本思想是get ...在测试中使用设置last_response局部变量,然后可以测试其是否相等等。
last_response有一个status属性,所以(就像在另一个答案中提到的那样)你可以测试以确保它last_response.status等于 404。
编辑:
我不是很清楚这一点。在测试模式下,应用程序确实会引发错误。
从Sinatra 设置
raise_errors
引发异常(将停止应用程序)。当环境设置为“测试”时默认启用,否则禁用。
因此,您实际上不想引发任何错误,而是raise Sinatra::NotFound.new("Not found!")要引发特定类型的错误。该Sinatra::NotFound错误将触发 404 处理程序。Sinatra 错误处理