after_save中的Rspec测试用例

时间:2018-05-30 13:25:35

标签: ruby-on-rails rspec

我有两个模型页面 文章。对于每个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 :(得分:0)

嗯,我想我可以在这里帮忙。

测试回调时,需要测试两个假设:

是否正在调用正确的事件? 它正在做它应该做的事情吗?

请记住,您要尝试确保您的测试涵盖一个特定情况。

您的规格应该是:

关于保存文章, 我希望该类能够收到回调方法

在保存新文章时, 我希望Page元素的数量增加一个

保存旧文章, 我希望现有页面能够更新

您可以根据文章类型等继续充实。

E.g。

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