如何使用RSpec检查JSON响应?
发布于 2021-01-31 17:29:07
我的控制器中有以下代码:
format.json { render :json => {
:flashcard => @flashcard,
:lesson => @lesson,
:success => true
}
在我的RSpec控制器测试中,我想验证某个场景确实收到了成功的json响应,因此我有以下内容:
controller.should_receive(:render).with(hash_including(:success => true))
尽管在运行测试时出现以下错误:
Failure/Error: controller.should_receive(:render).with(hash_including(:success => false))
(#<AnnoController:0x00000002de0560>).render(hash_including(:success=>false))
expected: 1 time
received: 0 times
我是否检查响应不正确?
关注者
0
被浏览
71
1 个回答
-
您可以检查响应对象并验证它是否包含期望值:
@expected = { :flashcard => @flashcard, :lesson => @lesson, :success => true }.to_json get :action # replace with action name / params as necessary response.body.should == @expected
编辑
将此更改为a
post
会比较麻烦。这是一种处理方法:it "responds with JSON" do my_model = stub_model(MyModel,:save=>true) MyModel.stub(:new).with({'these' => 'params'}) { my_model } post :create, :my_model => {'these' => 'params'}, :format => :json response.body.should == my_model.to_json end
请注意,它
mock_model
不会响应to_json
,因此需要一个stub_model
或真实的模型实例。