代码之家  ›  专栏  ›  技术社区  ›  hood

如何测试模型实例方法?

  •  2
  • hood  · 技术社区  · 6 年前

    我在实现Rspec时遇到了一些问题。我有三个模型; Post ,则, Tagging 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\u 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 回复  |  直到 6 年前
        1
  •  0
  •   NM Pennypacker    6 年前

    您可以执行以下操作:

    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 块。