RoR, RSpec - проблема с проверочным тестированием - PullRequest
1 голос
/ 31 августа 2010

Через генератор rspec (я использую rspec-1.3.0, rspec-rails-1.3.2 gems) (ruby script/generate rspec_model suggestion section_id:integer user_id:integer subject:string content:text state:string type:string) Я создал модель и спецификацию модели и запустил rake db:migrate and rake:test:prepare

После этогоЯ начал работать над спецификацией своей модели:

require 'spec_helper'

describe Suggestion do
  before(:each) do
    @valid_attributes = {
      :section_id => 1,
      :user_id => 1,
      :subject => 'Inappropriate title',
      :content => 'The title of this section is inappropriate.',
      :state => 'new',
      :type => 'flag'
    }
  end

  it "should create a new instance given valid attributes" do
    Suggestion.create!(@valid_attributes)
  end

  it "should reject empty section_id attribute" do 
    empty_section_id_suggestion = Suggestion.new(@valid_attributes.merge(:section_id => ""))
    empty_section_id_suggestion.should_not be_valid
  end

  ...

Помимо 1-го "should create a new instance given valid attributes" теста, я создал 6 тестов, в основном каждый атрибут тестирования модели предложения на пустоту - почти точно такой же, как пример "should reject empty section_id attribute".

Когда я запускаю тесты, я получаю 6 неудачных тестов, и это нормально.Первый тест "should create a new instance given valid attributes" пройден.

Теперь, когда я иду в модель предложения и добавляю validates_presence_of :all, я получаю следующее сообщение об ошибке, связанное с 1-м тестом:

ActiveRecord::RecordInvalid in 'Suggestion should create a new instance given valid attributes'
Validation failed: All can't be blank
./spec/models/suggestion_spec.rb:16:

Когда я пытаюсь запуститьизолированные тесты (validates_presence_of :attribute) все тесты проходят, только с атрибутом :type Я снова получаю похожее сообщение об ошибке:

ActiveRecord::RecordInvalid in 'Suggestion should create a new instance given valid attributes'
Validation failed: Type can't be blank
./spec/models/suggestion_spec.rb:16:

Я не сталкивался с этой проблемой ранее (есть несколько похожих моделей и ихспецификации проходят правильно).Похоже, у него есть проблема с атрибутом: type (он говорит, что он не может быть пустым), даже если я передаю ему значение через @valid_attributes.Я попытался выполнить поиск в Google, но не нашел похожую проблему / решение.

Вот тест для: type attribute

it "should reject empty type attribute" do 
        empty_type_suggestion = Suggestion.new(@valid_attributes.merge(:type => ""))
        empty_type_suggestion.should_not be_valid
  end

Пожалуйста, проверьте его и дайте мне знать, что яздесь неправильно.

Большое спасибо за помощь

Петр

Ответы [ 2 ]

1 голос
/ 01 сентября 2010

Итак, в конце я нашел ответ на проблему, связанную с атрибутом :type:

http://www.gyrotechie.com/2008/09/activerecord-does-not-like-attributes-called-type/

Проблема заключалась в том, что тип является зарезервированным именем поля для классов, которые наследуются от ActiveRecord .

Я переименовал имя поля с помощью миграции и изменил все связанные файлы, и теперь все работает правильно.

1 голос
/ 31 августа 2010

в вашей модели вы не можете просто сказать «подтвердить»: все потому, что: «все» не является именем столбца.

class Suggestion < AR::Base
  validates_pressence_of :subject, :content
end

не было бы никакой причины проверять наличие столбцов идентификатора, но я думаю, вы можете, если хотите.

API-документация: http://apidock.com/rails/ActiveModel/Validations/ClassMethods/validates_presence_of

...