2012-04-19 26 views
12

Hãy nói rằng tôi có một định nghĩa lớp như vậy:Làm thế nào để khẳng định rằng một lớp sẽ trả lời_cho một phương thức lớp với RSpec?

class Foo 
    def init(val) 
    @val = val 
    end 

    def self.bar 
    :bar 
    end 

    def val 
    @val 
    end 
end 

với một spec như:

describe Foo 
    it { should respond_to(:val) } 
    it { should respond_to(:bar) } 
end 

Thứ hai it khẳng định thất bại. Nó không phải là rõ ràng với tôi từ tài liệu của RSpec rằng respond_to nên thất bại trên phương pháp lớp học.

Trả lời

9

dụ của bạn nên được viết như thế này:

it 'should respond to ::bar' do 
    Foo.should respond_to(:bar) 
end 
16

Ngày nay nó được đề nghị chúng tôi sử dụng mong đợi, như thế này:

describe Foo do 
    it 'should respond to :bar' do 
    expect(Foo).to respond_to(:bar) 
    end 
end 

Xem: http://rspec.info/blog/2012/06/rspecs-new-expectation-syntax/


ĐÁP OLD :

Trên thực tế bạn có thể làm cho phương pháp này bằng cách cung cấp một subject:

describe Foo do 
    subject { Foo } 
    it { should respond_to :bar } # :bar being a class method 
end 

Như đã trình bày ở đây: http://betterspecs.org/#subject

Các vấn đề liên quan