При тестировании рельсов создавайте модель только в тестовой среде. - PullRequest
0 голосов
/ 02 августа 2011

У меня есть модель с полиморфной ассоциацией, на которой я запускаю rspecs.Тесты требуют, чтобы полиморфное поле указывало на модель с некоторыми полями (например, имя).

Поскольку я предпочитаю не использовать ни одну из своих существующих (и сложных) моделей, я подумал о том, чтобы как-то создать новую простуюмодели (которые будут существовать только в тестах), на которые могут указывать мои основные модели.

Есть ли способ сделать это?Есть ли другой способ тестирования моделей, когда они зависят от других моделей?

Ответы [ 2 ]

0 голосов
/ 02 августа 2011

Проблема решена - используется самоцвет mocha.

class Comment < ActiveRecord::Base
  belongs_to :commentable, :polymorphic => true
end

В тестах можно просто выполнить:

class MockUser {
# Stuff
}

comment = Comment.create!.expects('commentable').returns(MockUser.new)

Теперь это будет просто работать:

comment.commentable.name
0 голосов
/ 02 августа 2011

Как и следовало ожидать, тесты должны быть независимыми.

Это место, где появляются заглушки и макеты, и это способ Rails продолжить.

Если вы хотите создать модуль, предназначенный для тестов (это слишком много, потому что это роль заглушек), просто напомните, что классы ruby ​​и модули являются исполняемыми.

Так что вы можете просто сделать:

if Rails.env.test?

module Foo
...
end

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