Tôi đang cố gắng kiểm tra logic chạy trong quá trình thừa kế lớp, nhưng đã chạy vào một vấn đề khi chạy nhiều xác nhận.làm thế nào để kiểm tra thừa kế ruby với rspec
tôi lần đầu tiên cố gắng ...
describe 'self.inherited' do
before do
class Foo
def self.inherited klass; end
end
Foo.stub(:inherited)
class Bar < Foo; end
end
it 'should call self.inherited' do
# this fails if it doesn't run first
expect(Foo).to have_received(:inherited).with Bar
end
it 'should do something else' do
expect(true).to eq true
end
end
nhưng điều này không thành công vì lớp Bar đã được nạp, và do đó không gọi inherited
một lần thứ 2. Nếu xác nhận không chạy trước ... nó không thành công.
Vì vậy, sau đó tôi đã cố gắng một cái gì đó giống như ...
describe 'self.inherited once' do
before do
class Foo
def self.inherited klass; end
end
Foo.stub(:inherited)
class Bar < Foo; end
end
it 'should call self.inherited' do
@tested ||= false
unless @tested
expect(Foo).to have_receive(:inherited).with Bar
@tested = true
end
end
it 'should do something else' do
expect(true).to eq true
end
end
vì @tested
không tồn tại từ thử nghiệm để kiểm tra, thử nghiệm không chỉ chạy một lần.
có ai có cách thông minh để thực hiện việc này không? Đây là một ví dụ contrived và tôi không thực cần phải kiểm tra ruby bản thân;)
Kiểm tra các hành vi, không thực hiện. Kiểm tra nếu lớp kế thừa từ lớp đến sẽ chỉ hợp lý nếu phương thức đang làm công cụ lập trình meta (như lớp xây dựng và đặt anccestors) –