Как сделать эти тесты RSpec более сухими в Rails - PullRequest
2 голосов
/ 24 сентября 2010

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

  describe "authentication requests" do
    it "should return 401 for unauthenticated :show" do
      get :show
      ...
    end

    it "should return 401 for unauthenticated :create" do
      post :create
      ...
    end
  end

Есть ли лучший способ высушить этот код, чтобы любое действие в контроллере, требующее аутентификации, можно было описать в одномпроверить?

Ответы [ 2 ]

8 голосов
/ 24 сентября 2010

Если вам нужно повторить тесты на контроллерах, вы можете использовать макросы rspec. Создайте spec/macros/controller_macros.rb с помощью метода, подобного так:

def should_return_401_for_unauthenticated(test_controller)
  describe test_controller, "authentication requests" do
    it "should return 401 for show" do
      get :show
      response.code.should == "401"
    end
    it "should return 401 for create" do
      post :create
      response.code.should == "401"
    end
  end
end

Затем в каждой спецификации контроллера, которая нуждается в тестах:

describe MyController do
    should_return_401_for_unauthenticated(self)
end
1 голос
/ 24 сентября 2010

Я не пользователь rspec, но вы можете сделать что-то вроде:

describe "authentication requests" do

  limited_access = [:show, :create]

  limited_access.each do |action|
    it "should return 401 for unauthenticated :#{action}" do
      get action
      ## assert response 401
    end
  end

end

Или только один тест:

describe "authentication requests" do

  limited_access = [:show, :create]

  it "should return 401 for unauthenticated #{limited_access.to_sentence}" do
    limited_access.each do |action|
      get action
      ## assert response 401
    end
  end

end

Можно добавить метод spec_helper, чтобы абстрагировать его для вас ... Возможности безграничны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...