RSpec и ActiveRecord для Rails: как писать эффективные тесты - PullRequest
3 голосов
/ 06 сентября 2011

Я создал простое приложение rails с тремя классами, которые до сих пор наследуются от ActiveRecord. Я немного опередил свою тестовую разработку, так как я уже написал классы, которые нужно протестировать. Пока что все тесты, которые я написал, прошли хорошо. Объекты создаются, атрибуты отвечают, проверки все на месте.

Проблема начинается, когда я призываю "!" на моих методах создания, так как теперь объекты передаются полностью в базу данных. Вместо моих обычных проверок, перехватывающих неверные данные, кажется, что базе данных дается шанс ответить на стимул.

Пока ошибка, которую я получил при выполнении моих тестов:

ActiveRecord :: RecordInvalid: Проверка не удалась: Магазин слишком длинный (максимум 11 символов)

Я рад, что получаю эту ошибку, но хотел бы знать, как лучше спланировать ее в моих тестах. Код, который генерирует вышеуказанную ошибку:

  it "should not a accept a department with a shopify shop_id that's over 11 chars" do
    long_id = "9" * 12
    long_id_department = Department.create!(@attr.merge(:id => [long_id, ""]))
    long_id_department.should_not be_valid
  end

Я предполагаю, что эта строка, в частности, должна принять другую форму: long_id_department.should_not be_valid

Надеюсь, вы все могли бы пролить свет на то, какой должна быть эта форма.

Ответы [ 2 ]

4 голосов
/ 06 сентября 2011

Драгоценный камень musta делает проверку ваших проверок куском пирога. Более поздние выпуски musta созданы как дополнение к RSpec.

Документация для конкретного типа проверки, которую вы пытаетесь сделать, здесь.

Вы получите тестовый код, который выглядит следующим образом.

describe Department do
  it { should ensure_length_of(:id).is_at_most(11) }
end
3 голосов
/ 06 сентября 2011

Вам нужно отловить исключение, создаваемое командой create !. Как вы уже написали, исключение перехватывается rspec.

lambda do
 long_id_department = Department.create!(@attr.merge(:id => [long_id, ""]))
end.should raise_error

Тест should_not be_valid не имеет смысла для создания! так как он выдаст исключение, если объект не действителен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...