RSpec Rails - тема + назначается как один лайнер? - PullRequest
0 голосов
/ 06 мая 2018

Я борюсь со следующим RSpec. Почему это работает:

   it 'GET articles#new creates new instance of Article' do
    get :new
    expect(assigns[:article]).to be_a(Article)
  end

И ни один из них не нашел (нашел несколько примеров с разными скобками, и поэтому я решил проверить обе возможности)

  subject { get :new }
  it { expect(assigns[:article]).to be_a(Article) }
  it { expect(assigns(:article)).to be_a(Article) }

Я получаю эту ошибку:

 Failure/Error: it { expect(assigns(:article)).to be_a(Article) }
   expected nil to be a kind of Article(id: integer, title: string, body: string, author_id: integer, created_at: datetime, updated_at: datetime)
 # ./spec/controllers/articles_controller_spec.rb:35:in `block (4 levels) in <top (required)>'

Я не знаю, как извлечь "статью" из темы ...

Я также попробовал несколько различных комбинаций "субъекта" и "назначения" внутри него {...}, но не смог заставить его работать.

Я бы предпочел содержать его в чистоте и хранить только в одной строке :)

Кстати: есть ли у вас другие привычки писать спецификации для контроллеров? (Я уже проверяю ответ 200)

Ответы [ 2 ]

0 голосов
/ 17 мая 2018

subject, как и let, лениво оценивается, только когда вы ссылаетесь на него. Вместо этого вы можете использовать subject!, что будет оцениваться перед каждым примером

0 голосов
/ 06 мая 2018

Согласно документации , спецификация контроллера:

позволяет имитировать один http-запрос в каждом примере, а затем укажите ожидаемые результаты, такие как:

  • переменные экземпляра, назначенные в контроллере для совместного использования с представлением

, поэтому вы должны выполнить запрос (например, get :new) внутри блока it, чтобы получить правильный вывод.

Если вы определили запрос как предмет вашей спецификации (точность около subject здесь ), вам нужно запустить субъект внутри блока it:

subject { get :new }

it 'GET articles#new creates new instance of Article' do
  subject
  expect(assigns[:article]).to be_a(Article)
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...