Я создал набор спецификаций для имеющегося у меня контроллера (Фото), который является вложенным ресурсом Пользователя.Все спецификации проходят, но некоторые из них терпят неудачу, когда я представляю CanCan в контроллере Photos:
load_and_authorize_resource :user
load_and_authorize_resource :photo
Вот неудачный тестовый пример из одной из моих спецификаций:
describe "get 'show'" do
let(:photo) { Factory.stub(:photo) }
it "searches for the users photo" do
@user.photos.should_receive(:find).with(:photo.object_id);
get :show, :user_id => @user.id, :id => :photo.object_id;
end
context "when the photo doesn't exist" do
before do
@user.photos.stub(:find).with(:photo.object_id).and_raise(ActiveRecord::RecordNotFound);
get :show, :user_id => @user.id, :id => :photo.object_id;
end
it "assigns photo to nil" do
assigns[:photo].should be_nil;
end
it "renders the '404' template" do
response.status.should eql 404;
response.should render_template("#{Rails.root.to_s}/public/404.html") end
end
end
...
end
У меня естьустановите пользователя в верхней части файла спецификации:
login(:user)
before do
@user = controller.current_user # this could be any user.
User.stub!(:find).and_return(@user)
end
и метод show в контроллере Photos будет выглядеть следующим образом:
def show
# @user = User.find(params[:user_id])
# @photo = @user.photos.find(params[:id])
end
Обратите внимание, что действие пустое, потому что Cancanвыполняет поиск автоматически.До того, как я представил Cancan, две строки в действии не были закомментированы.
В моем тесте, когда я проверяю, например, что метод find вызывается на фотографиях пользователей, тест не проходит.Канкан должен использовать другую технику для поиска фотографий пользователей (кроме @ users.photos.find ()).Кто-нибудь знает, как переписать вышеупомянутые тесты для контроллера, который использует Cancan, т.е. заменить заглушки поиска чем-то, что будет работать?
В идеале я ищу некоторые примеры спецификаций для контроллера RESTful, которыеиспользует канкан.Даже спецификация для действия шоу была бы полезна.
Спасибо за чтение!
Eddie
ps - я использую Rails 3.0.6, Cancan 1.6.4 и Devise 1.3.3