2012-02-07 4 views
4

Я работаю над рельсами project и i m new на рельсах, и я хочу проверить свои модельные отношения и методы в модели с помощью rspec. Как я мог бы сделать это мои модели отношений, как этоТестирование отношений и методов в модели с использованием Rspec

class Idea < ActiveRecord::Base 

    belongs_to :person 
    belongs_to :company 
    has_many :votes 
    validates_presence_of :title, :description 
    def published? 
    if self.status == "published" 
     return true 
    else 
     return false 
    end 
    end 

    def image_present 
    if self.image_url 
     return self.image_url 
    else 
     return "/images/image_not_found.jpg" 
    end 
    end 



    def voted 
    self.votes.present? 
    end 
end 

Мой файл idea_spec.rb является

require 'spec_helper' 

describe Idea do 

    it "should have title" do 
    Idea.new(:title=>'hello',:description=>'some_desc').should be_valid 
    end 

    it "should have description" do 
    Idea.new(:title=>'hello',:description=>'some_desc').should be_valid 
    end 
end 
+0

Вы должны написать спецификации для кода * вы * пишите. Добавление тестов для функций, предоставляемых инфраструктурой, не является хорошей идеей. – Swanand

+1

Я согласен частично с комментарием @ Swanand, но это немного более тонко. Существует фундаментальное различие между ассоциациями (которые предоставляются каркасом) и валидациями (которые также предоставляются каркасом). Ассоциации - это структура, которую не нужно тестировать напрямую, потому что она должна существовать только для поддержки поведения, которое должно быть проверено. Валидации, однако, являются поведением и должны быть проверены. Мои 2 цента. –

+0

@DavidChelimsky - Конечно, согласен. Моя единственная забота заключалась в том, что валидации больше похожи на DSL, предоставляемые рельсами, и были уже проверены при прохождении рельсов. Но я возьму ваше слово для этого (я уже сделал это, прочитав книгу RSpec). – Swanand

ответ

5

Если вы используете Shoulda-matchers (https://github.com/thoughtbot/shoulda- matchers) gem вы можете написать их как it{should belong_to(:person)}

Но, честно говоря, я не получаю много из этих испытаний, AR хорошо протестирован.

+0

Я использую toa-matchers и всегда добавляю такие спецификации, так как это так легко и надежно. Они тестируют несколько вещей, включая наличие внешнего ключа в базе данных и т. Д. – iGEL

+0

Правда, но для тестов уникальности они заставляют вас ударить дБ при модульном тестировании. Я не говорю, что неправильно использовать эти тесты, я говорю, что лично я их не получаю, поскольку я уверен в AR. Если вы не уверены в коде, тогда вы должны проверить его, это хорошая практика. – Bangline

+0

Это действительно неправильно, чтобы проверить это. Это просто показывает наше недоверие к продукту с открытым исходным кодом. Тесты уже добавлены и переданы. Почему мы хотим снова протестировать его? – Swanand

0

Простой ответ: нет. Вы также не тестируете has_many или belongs_to. Место для этих спецификаций/тестов находится в Rails-кодовой базе, а не в вашей кодовой базе. You Idea spec дает вам абсолютно ничего, что Rails не делает.

Вот официальные тесты:

  1. belongs_to
  2. has_many

Edit: Пожалуйста, прочтите @ комментарий DavidChelimsky в выше.

+0

похоже, что у вас нет правильного вопроса ... он не спрашивает тестирование методов базовой ассоциации. Он хочет проверить присутствие ассоциаций внутри своей собственной модели, и это может быть сделано с помощью 'toa-matchers' –

+0

Он говорит:« Я хочу проверить свои модельные отношения и методы в модели ». Кроме того, в чем разница между «методами базовой ассоциации» и «ассоциациями внутри его собственной модели»? Разве они не то же самое? – Swanand

+0

Я хочу сказать, что базовые методы 'has_many, принадлежит_to', а ассоциации -' own_to: person', которые он хотел проверить. –

Смежные вопросы