我正在閱讀某人離開公司的Rspec。我想知道這行:Class.new在這個Rspec中有什麼好處
let(:mailer_class) { Class.new(AxeMailer) }
let(:mailer) { mailer_class.new }
describe '#check' do
before do
mailer_class.username 'username'
mailer.from '[email protected]'
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
- 有沒有,如果我只是改變這個問題呢?
- 有沒有辦法改變規範並使其通過?
除了'let'方法外,你能發佈更多的測試代碼嗎?這將有助於我們確定爲什麼這樣寫。 – 2012-03-13 10:14:19
剛剛添加了一些,這是否足夠? – lulalala 2012-03-13 10:19:46
給我,沒有理由。 – shingara 2012-03-13 10:25:13