我正在使用BDD方法为JSON REST API执行请求规范。这意味着规范默认会失败,因为没有真正实现,包括路由。这是一个简单的例子:
describe 'POST /users' do
context 'when the request is valid' do
before { post "/users", params: {userName: 'johndoe22'}}
it 'creates and returns the user' do
expect(json['userName']).to eq('johndoe22')
end
it 'returns status code 201 (created)' do
expect(response).to have_http_status(201)
end
end
...
end
基本上我要求一些东西(使用 get 或 post ),然后我将响应解析为JSON。问题是,如果 / users 不存在,而不是获取 ActionController :: RoutingError:没有路由匹配错误, post 会无声地失败,当我尝试将响应解析为JSON时,规范失败了。此响应实际上包含无路由匹配错误。
换句话说,当调用 post 方法时,测试失败,而不是在我尝试解析响应(一个无法解析为JSON的常规HTML页面)时测试失败。 / p>
Failure/Error: JSON.parse(response.body)
JSON::ParserError:
784: unexpected token at '<!DOCTYPE html>
<html lang="en">
...
作为参考,我会松散地遵循本教程:https://scotch.io/tutorials/build-a-restful-json-api-with-rails-5-part-one。如您所见,在执行请求规范时,他会收到相应的错误。
为什么会这样?我错过了某种配置吗?
答案 0 :(得分:0)
如果您没有看到预期的
ActionController::RoutingError: No route matches
这很可能是因为某些路线实际匹配该路径。
也许您的路线中有通配符或其他内容。您可以在控制台中查看,如下所示:
Rails.application.routes.recognize_path('/users', method: 'POST')