Как написать тестовый пример, используя rspec для уведомления - PullRequest
0 голосов
/ 03 сентября 2018

В моем приложении у меня есть контроллер тем, и мне нужно написать контрольный пример для создания новой темы. при создании новой темы она будет перенаправлена ​​на страницу показа вновь созданной темы, и будет отображено уведомление «Тема успешно создана!». Мне нужно написать контрольный пример, чтобы проверить правильность отображаемого уведомления или не использовать rspec. У меня есть контроллер темы:

 def create
@topic = Topic.new(topic_params)
if (@topic.save)
  redirect_to @topic, :notice => 'Topic was created successfully!'
else
  render :action => 'new'
end
end

TopicController spec:

it "should create new Topic and renders show" do
    expect {
      post :create,params:{ topic:{topicname: "Tech"} }
    }.to change(Topic,:count).by(1)
    expect(response).to redirect_to(topic_path(id: 1))
   /// expect().to include("Topic was created successfully!")
  end

Я уже написал тестовые примеры для перенаправления на страницу показа. Но я застрял с проверкой уведомления, которое я упомянул в комментарии в моем коде.

Ответы [ 2 ]

0 голосов
/ 03 сентября 2018

Используйте спецификацию функции (интеграционный тест) вместо спецификации контроллера, чтобы протестировать приложение, видимое пользователем:

# spec/features/topics.rb
require 'rails_helper'
RSpec.feature "Topics" do
  scenario "when I create a topic with valid attributes" do
    visit '/topics/new'
    fill_in 'Topicname', with: 'Behavior Driven Development' # Adjust this after whatever the label reads
    click_button 'create topic'
    expect(page).to have_content 'Topic was created successfully!'
  end

  scenario "when I create a topic but the attributes are invalid" do
    visit '/topics/new'
    fill_in 'Topicname', with: ''
    click_button 'create topic'
    expect(page).to_not have_content 'Topic was created successfully!'
    expect(page).to have_content "Topicname can’t be blank"
  end
end

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

На самом деле вы, возможно, захотите пересмотреть вопрос об использовании спецификаций контроллера, поскольку команды RSpec и Rails предлагают вместо этого использовать интеграционное тестирование. Если вы хотите выполнить тестирование на более низком уровне, чем спецификации функций, используйте спецификации запросов .

См:

0 голосов
/ 03 сентября 2018

Вы должны сделать что-то вроде этого

expect(flash[:notice]).to match(/Topic was created successfully!*/)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...