2013-12-20 68 views
0

我想为我的控制器之一编写一些rspec联合测试,并且我正在运行int有关stubbing REST api调用的一点疑惑。rails rspec存根并提出响应代码404响应

所以我有这个REST调用哪个接收水果ID并返回一个特定的水果信息,我想测试何时REST给我回应代码404(未找到)。理想情况下,我会踩灭的方法调用和返回错误代码

在控制器

def show 
    @fruit = FruitsService::Client.get_fruit(params[:id]) 
end 

规格/控制器/ fruits_controller_spec.rb

describe '#show' do 
    before do  
    context 'when a wrong id is given' do 
     FruitsService::Client.any_instance 
      .stub(:get_fruit).with('wrong_id') 
      .and_raise     <----------- I think this is my problem 

    get :show, {id: 'wrong_id'} 
    end 

    it 'receives 404 error code' do 
    expect(response.code).to eq('404') 
    end 

end 

这给这个

Failure/Error: get :show, {id: 'wrong_id'} 
RuntimeError: 
    RuntimeError 
+0

您的测试出您磕碰 – bjhaid

回答

0

您没有处理控制器中的响应。我不确定你的API在404情况下返回什么。如果它只是引发异常,那么你将不得不修改你的代码并测试一下。假设你有一个索引行动

def show 
    @fruit = FruitsService::Client.get_fruit(params[:id]) 
rescue Exception => e 
    flash[:error] = "Fruit not found" 
    render :template => "index" 
end 

describe '#show' do 
    it 'receives 404 error code' do 
    FruitsService::Client.stub(:get_fruit).with('wrong_id').and_raise(JSON::ParserError) 

    get :show, {id: 'wrong_id'} 

    flash[:error].should == "Fruit not found" 
    response.should render_template("index") 
    end 

end 
+0

我刚刚发现的REST API调用实际上将抛出一个WebapplicationException,它会返回一个JSON字符串“提供的水果ID为背景的如果id不存在,则为'null'。我正在考虑是否存在残留并引发异常 – AirWick219

+0

Rails将通过WebApplicationException的另一种异常类型来处理异常。打印救援块内的'e.class'以找出异常类型,并在测试 – usha

+0

中提出相同的异常,结果发现它是JSON :: ParserError,所以我猜想我的原始想法与FruitsService :: Client。 any_instance.stub(:get_fruit).with('wrong_id')。and_raise(JSON :: ParserError) – AirWick219