Делегирование объектов ActiveRecord с простыми объектами ruby - PullRequest
0 голосов
/ 27 января 2011

Я хочу иметь возможность иметь TestUser модель специально для разработки и тестирования, которая будет действовать точно так же, как моя обычная модель пользователя, за исключением того, что она всегда аутентифицируется.
Ключевая проблема здесь заключается в том, чтобы TestUser всегда вызывал методы класса для User и просматривал его переменные экземпляра уровня класса, как если бы он был обычным пользователем, а не делал это через cattr_accessor i.e.:

class User
  class << self
    attr_accessor :foo
  end
end

class TestUser ?< ??
  ??
end

---
User.foo = 'bar'
TestUser.foo => 'bar'
User.new.authenticate?('password') => maybe, runs authentication
TestUser.new.authenticate?(_) => true

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

Ответы [ 2 ]

0 голосов
/ 27 января 2011
class TestUser < User
  def authenticate?
    true
  end
end

Но вам действительно нужно использовать tests / rspec, если вы просто тестируете свой код.

И вы можете использовать: cattr_accessor :foo для доступа к переменным класса.

0 голосов
/ 27 января 2011

Я бы не стал тратить на это время, если вы не собираетесь использовать его в производстве.

У вас есть тесты, которые позволяют вам «всегда аутентифицировать пользователя», но зачем тратить время на эту приятную проблему, когда вы могли бы писать код для достижения своей конечной цели, чтобы добиться этого быстрее / сильнее / лучше… какова бы ни была ваша цель.

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