тестирование устройства и cancan в спецификациях контроллера (rspec) - PullRequest
3 голосов
/ 12 мая 2011

Теперь, когда CanCan и Devise работают хорошо, мне нужно добавить к своим тестам.

Стоит ли ожидать удвоения количества тестов, а может и большего? Мне нужно протестировать все как "гостевой" пользователь, а затем как пользователь, а также как администратор.

С rspec, как бы вы выложили это?

describe "GET edit" do
    login_admin
    it "assigns the requested forum_topic as @forum_topic" do
      ForumTopic.stub(:find).with("37") { mock_forum_topic }
      get :edit, :id => "37"
      response.should redirect_to( new_user_session_path )
    end

    it "assigns the requested forum_topic as @forum_topic" do
      ForumTopic.stub(:find).with("37") { mock_forum_topic }
      get :edit, :id => "37"
      assigns(:forum_topic).should be(mock_forum_topic)
    end
end

вспомогательный модуль

  def login_admin
    before(:each) do
      @request.env["devise.mapping"] = Devise.mappings[:admin]
      sign_in Factory.create(:admin)
    end
  end

  def login_user
    before(:each) do
      @request.env["devise.mapping"] = Devise.mappings[:user]
      @user = Factory.create(:user)
      sign_in @user
    end
  end

1 Ответ

2 голосов
/ 19 октября 2012

Что обычно делается при тестировании CanCan, так это тестирование файла способностей как такового.

Например, если вы проверяете, что в вашем приложении вы не сможете просматривать определенный форум, если не подписаны, вы можете проверить его следующим образом:

@user = Factory.create(:user)
@forum = Factory.create(:forum)

describe "User ability" do
  it "Should be able to view forums" do
    @ability = Ability.new(@user)
    @ability.should be_able_to(:show, @forum)
  end
end

describe "nil ability" do
  it "Should be not be able to view forums if not signed in" do
    @ability = Ability.new(nil)
    @ability.should_not be_able_to(:show, @forum)
  end
end

Это всего лишь пример.

Подробнее об этом можно прочитать в: https://github.com/ryanb/cancan/wiki/Testing-Abilities

И, наконец, чтобы протестировать устройство, я просто провожу интеграционное тестирование с капибарой и выполняю вход с правами администратора и пользователя.

...