Ruby on rails 带rspec的Cover format.json

Ruby on rails 带rspec的Cover format.json,ruby-on-rails,ruby,json,rspec,Ruby On Rails,Ruby,Json,Rspec,我想知道如何在rspec上从控制器测试这个format.json。以下是我想介绍的代码: 控制器: def edit @ngo = Ngo.find(params[:id]) respond_to do |format| if request.xhr? if params[:zipcode] format.json { render json: Address.new(Correios::CEP::AddressFinder.get(params[

我想知道如何在rspec上从控制器测试这个format.json。以下是我想介绍的代码:

控制器:

def edit
  @ngo = Ngo.find(params[:id])
  respond_to do |format|
    if request.xhr? 
      if params[:zipcode] 
        format.json { render json: Address.new(Correios::CEP::AddressFinder.get(params[:zipcode]))}
      end
    else
      @phones = Hash[@ngo.phones.map {|phone| [phone.id.to_s ,phone.phone_number]}]
      @phones = @phones.to_json
      format.html 
    end
  end
end

我试过一些方法,但没有成功。有人知道我是怎么做的吗?谢谢:)

这可能适合你。它涉及到我做一些我以前从未尝试过的事情,比如
xhr:post,:edit
和模块继承。让我知道这是否有效

# spec/controllers/some_controller_spec.rb

describe SomeController, type: :controller do
  context "#edit" do
    it "renders address as json" do
      ngo = double(:ngo, id: "1")
      correios_obj = double(:correios_obj)
      json_address = double(:json_address)
      expect(Ngo).to receive(:find).with("1").and_return(ngo)
      expect(Correios::CEP::AddressFinder).to receive(:get).with("35950").and_return(correios_obj)
      expect(Address).to receive(:new).with(correios_obj).and_return(json_address)
      xhr :post, :edit, zipcode: "35950", id: "1"
      expect(response.body).to eq json_address
    end
  end
end

还帮助我完成了xhr部分

这将有助于向我们展示您的尝试和失败之处。我尝试从json获得任何响应,包括expect(json.parse(response.body))。到eq('1231'),但我真的不知道我在做什么。您没有显示您的规范代码。。。但通常类似的问题也存在于spec文件中。原因:RSpec尝试加速测试,默认情况下不提供响应。