How to test class methods in RSPEC
Apparently there is a described_class
method.
https://www.relishapp.com/rspec/rspec-core/docs/metadata/described-class
I suppose it's cleaner than subject.class
, since it doesn't introduce another .
method call, which reduces readability.
Using either described_class
or subject.class
may be more DRY than mentioning the class explicitly in every example. But personally I think not getting the syntax highlighting that comes with mentioning the class name explicitly is kind of a bummer, and I think it reduces readability, despite it totally winning in the maintainability department.
A question arises regarding best practice:
Should you use described_class whenever possible inside and outside the .expect()
method, or only within the expect()
method?
There isn't a subject
equivalent for calling a method, so using it
is the way to go here. The issue I see with your code as presented is that it doesn't actually explain what you are testing for. I would write something more like:
describe Buy do describe '.get_days' do it 'should detect hyphenated weeknights' do Buy.get_days('Includes a 1-weeknight stay for up to 4 people').should == 1 end it 'should detect hyphenated nights' do Buy.get_days('Includes a 1-night stay in a King Studio Room with stone fireplace').should == 1 end it 'should detect first number' do Buy.get_days('Includes 4 nights/5 days at the Finisterra Hotel for up to two adults and two children (staying in the same room)').should == 4 end endend
I'm making assumptions about what you're after here, but hopefully the idea is clear. This will also lead to much more helpful error output when a test fails. Hope this helps!