参照系しか試してない。
下記の例では、MemberというActiveResourceをリスト表示したり詳細表示したりするControllerについて、RSpecでテストする。
(参考:ActiveResource の使い方(前編) : Rails 同士で通信する - WebOS Goodies ※「ユニットテスト」の項。RSpecではないけど。)
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
require 'active_resource/http_mock'
describe MembersController do
before do
@member = {:id => 1, :name => 'foo'}
@members = [@member]
@header = Member.connection.__send__(:build_request_headers, {}, :get)
ActiveResource::HttpMock.respond_to do |mock|
mock.get '/members.xml', @header, @members.to_xml(:root => 'members')
mock.get '/members/1.xml', @header, @member.to_xml(:root => 'member')
end
end
#後は普通にケースを書く
#(略)
end
要するに、http_mockをrequireしておき、before()でモックが返すXMLを定義している。
ActiveResourceで取得する際にパラメータ付きのURLを使う場合、「mock.get」のところにもパラメータを付けなければいけないので注意。
例:
mock.get '/members.xml?q=keyword', @header, @members.to_xml(:root => 'members')
...と、ここまで書いてから、mockを使ってテストできることを知った。
before doActiveResourceでもActiveRecordでもModelであることには違いがないから、ただMockを使えば良いだけだった。
@member = mock_model(Member)
Member.should_receive(:find).with(:all).and_return(@member)
get 'index'
end
HttpMockはむしろ、ActiveResource::Baseを継承したModelのテストのために使うのか。
0 件のコメント:
コメントを投稿