Tôi đang đọc qua một số Rspec được viết bởi người đã rời công ty. Tôi đang tự hỏi về dòng này:Lợi ích của Class.new trong 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) } }
Nó được thử nghiệm lớp này:
class AxeMailer < AbstractController::Base
def self.controller_path
@controller_path ||= name.sub(/Mailer$/, '').underscore
end
Tôi muốn biết sự khác biệt giữa điều này và let(:mailer_class) { AxeMailer }
.
Tôi hỏi điều này bởi vì hiện tại khi tôi chạy thử nghiệm, nó sẽ khiếu nại name
là không. Nhưng nếu tôi thay đổi nó, nó sẽ kiểm tra tốt.
Tôi nghĩ vấn đề này bắt đầu sau khi sử dụng Rails 3.2 và tôi nghĩ rằng name
được kế thừa từ AbstractController :: Base.
Điều này giống nhau trong bảng điều khiển (có nghĩa là nó không phải là Rspec cụ thể), tôi có thể làm AxeMailer.name
không có lỗi, nhưng nếu tôi làm Class.new(AxeMailer)
thì có vấn đề.
Câu hỏi của tôi là:
- Có một lý do để sử dụng
Class.new(AxeMailer)
quaAxeMailer
- Có một vấn đề nếu tôi chỉ cần thay đổi này?
- Có cách nào không thay đổi thông số kỹ thuật và vượt qua thông số không?
Bạn có thể đăng thêm mã kiểm tra ngoài phương thức 'let' không? Điều đó sẽ giúp chúng tôi xác định lý do tại sao nó được viết theo cách này. –
chỉ cần thêm một số, điều đó có đủ không? – lulalala
với tôi, không có lý do gì. – shingara