Как поместить тесты RSpec Rails Controller в другой каталог? - PullRequest
1 голос
/ 05 декабря 2011

Я бы хотел поместить несколько интеграционных тестов в отдельный каталог со спецификациями моего контроллера. Однако, когда я перемещаю свой spec-файл в spec / интеграции, он завершается неудачно с:

ArgumentError:
       bad argument(expected URI object or URI string)

Спецификация проходит правильно, когда находится в каталоге spec / controllers.

Вот немного из моей спецификации:

require 'spec_helper'

describe Users::LoginsController, type: :controller do
  let!(:user) { User.create(email: 'test@test.com', password: 'test')

  it 'logs in the user' do
    post :create, email: 'test@test.com', password: 'test'
    controller.current_user.should == user
  end
end

Я использую Rails 3.1.3, RSpec 2.7.0.

Есть ли какие-нибудь хитрости, которые я должен использовать, чтобы достичь этого?

Ответы [ 6 ]

2 голосов
/ 01 февраля 2013

Попробуйте указать тип:

describe ProductsController, type: :controller do
  it 'can test #show' do
    get :show
  end
end

Работает в Rails 3.2.11

0 голосов
/ 15 июля 2014

У меня была такая же проблема, и я просто использовал URL

get "/users"

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

0 голосов
/ 22 февраля 2014

Этот подход работает для меня в Rails 4 и RSpec 2.14.7:

Мои выводы:

  1. Не называйте свой каталог integration.Мне нужно просмотреть источник RSpec или Rails, но это, похоже, отрицательно сказывается на работе спецификаций контроллера.Возможно, кто-то с этим знанием может присоединиться, чтобы подтвердить это.
  2. Назовите это как-то иначе, чем интеграция;в моем случае я пытался int, что приводило к проблемам , пока я не добавил "type:: controller" после метода #describe.
  3. После этого я смог двигатьсявсе мои медленные спецификации Rails в моем каталоге int, что позволяет мне создать каталог unit для всех моих отсоединенных быстрых спецификаций.

Пожалуйста, дайте мне знать, если это работает для вас.

Кстати, я бегу:

  1. Ruby 1.9.3
  2. Rails 4.0.2
  3. rspec-core 2.14.7
  4. rspec-rails 2.14.1

все в Mac OS X.

0 голосов
/ 26 июня 2012

Тестовой среде не понравится, если вы зададите тестовое действие с помощью символа.

it 'logs in the user' do
    post :create, email: 'test@test.com', password: 'test'
    controller.current_user.should == user
end

становится

it 'logs in the user' do
    post 'create', email: 'test@test.com', password: 'test'
    controller.current_user.should == user
end
0 голосов
/ 05 декабря 2011

Вы должны сделать следующее:

describe Users::LoginsController do
  controller_name 'users/logins'

  ... the rest of your spec here ...

end

Я не совсем уверен насчет вложенного синтаксиса, но по крайней мере вам нужно указать controller_name, чтобы заставить его работать.

Надеюсь, это поможет.

0 голосов
/ 05 декабря 2011

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

...