RSpec и ActiveRecord: пример завершается неудачно при неверном сценарии - PullRequest
1 голос
/ 17 марта 2012

Я новичок в Rails и пытаюсь написать приложение с TDD и BDD.

Теперь в одной из моделей имеется проверка длины поля. В RSpec есть пример, который проверяет проверку длины этого конкретного поля.

Вот класс модели

class Section < ActiveRecord::Base

    # Validations
    validates_presence_of :name, length: { maximum: 50 }

end

и RSpec

require 'spec_helper'

describe Section do
    before do
      @section = Section.new(name:'Test')
    end

    subject { @section }

    # Check for attribute accessor methods
    it { should respond_to(:name) }


    # Sanity check, verifying that the @section object is initially valid
    it { should be_valid }

    describe "when name is not present" do
        before { @section.name = "" }
        it { should_not be_valid }
    end

    describe "when name is too long" do
      before { @section.name = "a" * 52 }
      it { should_not be_valid }
    end
end

Когда я запускаю этот пример спецификации, происходит сбой со следующей ошибкой

....F......

Failures:

  1) Section when name is too long 
     Failure/Error: it { should_not be_valid }
       expected valid? to return false, got true
     # ./spec/models/section_spec.rb:24:in `block (3 levels) in <top (required)>'

Finished in 0.17311 seconds
11 examples, 1 failure

Я что-то здесь упускаю?

Также, пожалуйста, предложите мне несколько ссылок, чтобы узнать, как следует тестировать модели, особенно отношения с использованием RSpec (и musta).

1 Ответ

5 голосов
/ 17 марта 2012

Метод validates_presence_of не имеет опции length.Вы должны проверить длину с помощью метода validates_length_of:

class Section < ActiveRecord::Base
  # Validations
  validates_presence_of :name
  validates_length_of :name, maximum: 50
end

Или использовать rails3 новый синтаксис проверки:

class Section < ActiveRecord::Base
  # Validations
  validates :name, presence: true, length: {maximum: 50}
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...