rspec - как проверить атрибут модели, который не является столбцом базы данных

У меня есть модель на основе Active Record:- Дом

У него есть различные атрибуты, но нет formal_name приписывать. Однако у него есть метод для formal_nameт.е.

def formal_name
    "Formal #{self.other_model.name}"
end

Как я могу проверить, что этот метод существует?

Я имею:

describe "check the name " do

    @report_set = FactoryGirl.create :report_set
    subject  { @report_set }
    its(:formal_name) { should == "this_should_fail"  }
end

Но я получаю undefined method 'formal_name' for nil:NilClass

2 ответа

Решение

Во-первых, вы, вероятно, хотите убедиться, что ваша фабрика хорошо выполняет свою работу, создавая report_set - возможно, поместите factory_girl в группу разработки и тестирования в своем Gemfile, запустите irb, чтобы убедиться, что FactoryGirl.create :report_set не возвращает ноль.

Тогда попробуй

describe "#formal_name" do
  let(:report_set) { FactoryGirl.create :report_set }

  it 'responses to formal_name' do
    report_set.should respond_to(:formal_name)
  end

  it 'checks the name' do
    report_set.formal_name.should == 'whatever it should be'
  end
end

Лично я не фанат используемого вами ярлыка rspec. Я бы сделал это так

describe '#formal_name' do
  it 'responds to formal_name' do
    report_set = FactoryGirl.create :report_set
    report_set.formal_name.should == 'formal_name'
  end
end

Я думаю, что так проще понять.


РЕДАКТИРОВАТЬ: Полный рабочий пример с FactoryGirl 2.5 в проекте Rails 3.2. Это проверенный код

# model - make sure migration is run so it's in your database
class Video < ActiveRecord::Base
  # virtual attribute - no table in db corresponding to this
  def embed_url
    'embedded'
  end
end

# factory
FactoryGirl.define do
  factory :video do
  end
end

# rspec
require 'spec_helper'

describe Video do
  describe '#embed_url' do
    it 'responds' do
      v = FactoryGirl.create(:video)
      v.embed_url.should == 'embedded'
    end
  end
end

$ rspec spec/models/video_spec.rb  # -> passing test
Другие вопросы по тегам