使用rspec

时间:2016-01-02 19:23:54

标签: ruby-on-rails ruby json rspec

我想知道如何在rspec上从我的Controller测试这个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

我尝试了一些方法但没有成功。谁知道我怎么做?谢谢:))

1 个答案:

答案 0 :(得分:0)

这可能对你有用。它涉及到我做了一些我以前从未尝试过的事情,例如xhr :post, :edit和模块继承.get调用,但我认为它看起来是正确的。如果有效,请告诉我!

# 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

同样this SO post帮助了我xhr部分