Контрольный пример Rspec в after_save - PullRequest
0 голосов
/ 30 мая 2018

У меня две модели Страница Артикул .Для каждого созданного article создается page с атрибутами article.Как указано ниже:

class Article

after_save :article_page_create

def article_page_create
    site = Site.find_by(data_proxy_id: self.data_proxy_id)
    page = Page.where(entity_id: self.id)
    if page.blank?
      if article_type == 'StaticPage'
        Page.create(entity_id: self.id, url: "/static/#{self.url_part}", page_type: 'static_page')
      else
        Page.create(entity_id: self.id, url: self.url, page_type: 'article_page')
      end
    else
      return page.update(url: self.url) unless article_type == 'StaticPage'
      page.update(url: "/static/#{self.url_part}")
    end
  end
end

Я пробую контрольные примеры в первый раз.Пока это то, как далеко я дошёл.

article_spec.rb

require 'rails_helper'
RSpec.describe Article, type: :model do
  context 'validation tests' do
     it 'ensures article attrs presence' do
        page = Page.create(entity_id: self.id, url: "/static/#{self.url_part}", page_type: 'static_page')
        expect(page).to eq(true)
     end
  end
end

Я просто хотел знать, это способ проверки моего after_save метода.Поправьте меня, если я ошибаюсь, пожалуйста.

1 Ответ

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

Хмммм, я думаю, что смогу помочь здесь.

При тестировании обратных вызовов вам нужно проверить два предположения:

Вызывается ли это для правильного события?Он делает то, что должен делать?

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

Ваши спецификации должны быть такими:

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

При сохранении новой статьи я ожидаю, что количество элементов Page увеличится на один

При сохранении старой статьи яожидайте обновления существующей страницы

Вы можете продолжать уточнять, основываясь на типах статей и т. д.

Например,

it 'triggers a callback to create a page on save' do
  expect(my_class_instance).to receive(:article_page_create)
  @article.save
end

context 'when creating a new page' do
  it "creates a new article" do
    # expect number of pages to change by 1
  end
end

context 'when updating an old page' do
  it 'updates the corresponding article' do 
    # expect attribs to be correct for corresponding page
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...