我想知道如何在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
我尝试了一些方法但没有成功。谁知道我怎么做?谢谢:))
答案 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部分