Как проверить метод экземпляра модели? - PullRequest
0 голосов
/ 28 апреля 2018

У меня проблемы с реализацией Rspec. У меня есть три модели; Post, Tagging и Tag.

приложение / модели / tag.rb

class Tag < ApplicationRecord
  # associations
  has_many :taggings
  has_many :posts, through: :taggings

  # validations
  validates :name, presence: true, uniqueness: { case_sensitive: false }

  # returns a list of posts that are belonging to tag.
  def posts
      ...
  end
end

Я смог написать спецификации для ассоциаций и проверок, но застрял при написании спецификации для метода экземпляра def posts ... end. Может кто-нибудь кратко объяснить, как написать эту спецификацию? Я новичок в Rspec, поэтому, пожалуйста, потерпите меня.

спецификация / модель / tag_spec.rb

require 'rails_helper'

RSpec.describe Tag, type: :model do
  describe "Associations" do
    it { should have_many(:posts).through(:taggings) }
  end

  describe "Validations" do
    subject { FactoryBot.create(:tag) }

    it { should validate_presence_of(:name) }
    it { should validate_uniqueness_of(:name).case_insensitive }
  end

  describe "#posts" do
    # need help
  end

end

1 Ответ

0 голосов
/ 28 апреля 2018

Вы можете сделать что-то вроде:

describe '#posts' do
  before do
    let(:tag) { Tag.create(some_attribute: 'some_value') }
    let(:tagging) { Tagging.create(tag: tag, some_attribute: 'some_value') }
  end

  it "tag should do something" do
    expect(tag.posts).to eq('something')
  end

  it "tagging should do something" do
    expect(tagging.something).to eq('something')
  end

end 

Это позволит вам протестировать методы экземпляра на Tag. По сути, вы хотите построить объекты, которые вы хотите протестировать, в блоке before и вызвать методы экземпляра для них в блоках it.

...