Я читаю некоторые Rspec, написанные кем-то, кто покинул компанию.Мне интересно об этой строке:
let(:mailer_class) { Class.new(AxeMailer) }
let(:mailer) { mailer_class.new }
describe '#check' do
before do
mailer_class.username 'username'
mailer.from 'tester@example.com'
mailer.subject 'subject'
end
subject { lambda { mailer.send(:check) } }
Это тестирование этого класса:
class AxeMailer < AbstractController::Base
def self.controller_path
@controller_path ||= name.sub(/Mailer$/, '').underscore
end
Я хочу знать разницу между этим и let(:mailer_class) { AxeMailer }
.
Я спрашиваю об этом, потому что в настоящее время, когда я запускаю тест, он будет жаловаться name
- ноль.Но если я изменил его, то все будет хорошо.
Я думаю, что эта проблема началась после использования Rails 3.2, и я думаю, что name
унаследован от AbstractController :: Base.
Это то же самое в консоли (то есть, это не относится к Rspec), я могу сделать AxeMailer.name
без ошибок, но если я сделаю Class.new(AxeMailer)
, то есть проблема.
Мои вопросы:
- Есть ли причина использовать
Class.new(AxeMailer)
сверх AxeMailer
- Есть ли проблема, если я просто изменил это?
- Есть ли способ не изменить спецификацию и заставить ее пройти?