我正在尝试使用codechool课程“使用Rails生存API”创建一个API作为指导。 这是我的控制器索引:
def index
respond_to do |format|
format.json { render json: Project.all, status: 200 }
format.all { head 406 }
end
end
当我尝试用这样的rspec测试控制器时(如在课程中):
get :index, {}, { 'Accept' => Mime::JSON }
expect(response.status).to eq(200)
请求未设置为JSON,它设置为html。 (并且测试失败:预计200得到406) 但是如果我试试这个:
request.accept = Mime::JSON.to_s
get :index, {}, {}
expect(response.status).to eq(200)
请求接受标头设置为“application / json”,测试通过。
所以我确实有一个解决方法,但我认为在使用get method时我可以设置不同的标题。我甚至尝试过评论所说的here。我错过了什么'接受'=> Mime :: JSON不起作用?
由于
答案 0 :(得分:-1)
好的,我从codechool的支持中得到了一些帮助:
看起来get方法在控制器测试/规范上的工作方式与请求规范/集成测试(我们在课程中使用的方法)不同。
我相信您的示例是控制器规范,可能正在使用这一个 - https://github.com/rails/rails/blob/master/actionpack/lib/action_co ...从阅读文档,看起来并不像是在那里传递标题值的方法方法,所以您的替代方案可能是设置标头的唯一方法。另一方面,集成测试使用另一个get方法https://github.com/rails/rails/blob/master/actionpack/lib/action_di ...这是我们在课程中使用的方法。
谢谢代码学校。