how would you check for a range using rspec? person.password.range.should == Range.new(5..40) <- this doesn''t work -------------- next part -------------- An HTML attachment was scrubbed... URL: http://rubyforge.org/pipermail/rspec-users/attachments/20070527/4d8cb007/attachment-0001.html
On 5/27/07, Andrew WC Brown <omen.king at gmail.com> wrote:> how would you check for a range using rspec? > > person.password.range.should == Range.new(5..40) <- this doesn''t workThe correct ruby syntax is Range.new(5, 40). So this should work: person.password.range.should == Range.new(5, 40) Cheers, David
On 5/27/07, David Chelimsky <dchelimsky at gmail.com> wrote:> On 5/27/07, Andrew WC Brown <omen.king at gmail.com> wrote: > > how would you check for a range using rspec? > > > > person.password.range.should == Range.new(5..40) <- this doesn''t work > > The correct ruby syntax is Range.new(5, 40). So this should work: > > person.password.range.should == Range.new(5, 40)OR .... person.password.range.should == (5..40) #shortcut for Range.new(5, 40)> > Cheers, > David >
Well I get error as such: 1) NoMethodError in ''Person should require a password within the range of 5..40 characters'' undefined method `range'' for "ruby_tuesday":String ./spec/models/person_spec.rb:43: and I have a feeling that they''re right when they say string doesn''t have a range method. I thought this would work: person.password.length.should == (5..40) but doesn''t look so 1) ArgumentError in ''Person should require a password within the range of 5..40 characters'' wrong number of arguments (1 for 2) ./spec/models/person_spec.rb:43:in `initialize'' ./spec/models/person_spec.rb:43:in `new'' ./spec/models/person_spec.rb:43: On 5/27/07, David Chelimsky <dchelimsky at gmail.com> wrote:> > On 5/27/07, David Chelimsky <dchelimsky at gmail.com> wrote: > > On 5/27/07, Andrew WC Brown <omen.king at gmail.com> wrote: > > > how would you check for a range using rspec? > > > > > > person.password.range.should == Range.new(5..40) <- this doesn''t work > > > > The correct ruby syntax is Range.new(5, 40). So this should work: > > > > person.password.range.should == Range.new(5, 40) > > OR .... > > person.password.range.should == (5..40) #shortcut for Range.new(5, 40) > > > > > > Cheers, > > David > > > _______________________________________________ > rspec-users mailing list > rspec-users at rubyforge.org > http://rubyforge.org/mailman/listinfo/rspec-users >-------------- next part -------------- An HTML attachment was scrubbed... URL: http://rubyforge.org/pipermail/rspec-users/attachments/20070527/6e148572/attachment.html
On 5/27/07, Andrew WC Brown <omen.king at gmail.com> wrote:> Well I get error as such: > > 1) > NoMethodError in ''Person should require a password within the range of 5..40 > characters'' > undefined method `range'' for "ruby_tuesday":String > ./spec/models/person_spec.rb:43: > > and I have a feeling that they''re right when they say string doesn''t have a > range method. > > I thought this would work: > person.password.length.should == (5..40) > > but doesn''t look so > > 1) > ArgumentError in ''Person should require a password within the range of 5..40 > characters'' > wrong number of arguments (1 for 2) > ./spec/models/person_spec.rb:43:in `initialize'' > ./spec/models/person_spec.rb:43:in `new'' > ./spec/models/person_spec.rb:43:OK. I should have asked for the backtrace first. It''s generally a good idea to include backtraces rather than just saying "it doesn''t work". "Person should require a password within the range of 5..40" suggests to me that you should have several examples: Person should require password length between 5 and 40 - should not accept a password of length 4 - should accept a password of length 5 - should accept a password of length 40 - should not accept a password of length 41 Make sense?> > > > > On 5/27/07, David Chelimsky <dchelimsky at gmail.com> wrote: > > > > On 5/27/07, David Chelimsky <dchelimsky at gmail.com > wrote: > > > On 5/27/07, Andrew WC Brown <omen.king at gmail.com> wrote: > > > > how would you check for a range using rspec? > > > > > > > > person.password.range.should == Range.new(5..40) <- this doesn''t work > > > > > > The correct ruby syntax is Range.new(5, 40). So this should work: > > > > > > person.password.range.should == Range.new(5, 40) > > > > OR .... > > > > person.password.range.should == (5..40) #shortcut for Range.new(5, 40) > > > > > > > > > > Cheers, > > > David > > > > > _______________________________________________ > > rspec-users mailing list > > rspec-users at rubyforge.org > > http://rubyforge.org/mailman/listinfo/rspec-users > > > > > _______________________________________________ > rspec-users mailing list > rspec-users at rubyforge.org > http://rubyforge.org/mailman/listinfo/rspec-users >
On 27 May 2007, at 8.31 pm, Andrew WC Brown wrote:> > I thought this would work: > person.password.length.should == (5..40) >I think that in this case, you want to use the === operator when comparing a number with a range. Instead of trying to see if both of the objects (the number and the range) are the same, the === operator checks to see if the number is within the range. Also, make sure you surround your range with parenthesis (which you are already doing), and put the range on the left hand side of the === operator for it to work. Have a look at this quick irb session for an example of what I mean: >> (10..50) == 15 => false >> (10..50) === 15 => true >> 10..50 === 15 ArgumentError: bad value for range from (irb):6 >> 15 === 10..50 ArgumentError: bad value for range from (irb):7 >> 15 === (10..50) => false >> Hope this helps, Sam --- http://sam.aaron.name
it "should require a password within the range of 5..40 characters" do person = create(:last_name => "ruby_tuesday") person.password.should_not be_nil (5..40) === person.password.length.should end Its true, it really works, tell all your friends! On 5/27/07, Sam Aaron <sam.maillists at googlemail.com> wrote:> > > On 27 May 2007, at 8.31 pm, Andrew WC Brown wrote: > > > > I thought this would work: > > person.password.length.should == (5..40) > > > > I think that in this case, you want to use the === operator when > comparing a number with a range. Instead of trying to see if both of > the objects (the number and the range) are the same, the === operator > checks to see if the number is within the range. > > Also, make sure you surround your range with parenthesis (which you > are already doing), and put the range on the left hand side of the > === operator for it to work. Have a look at this quick irb session > for an example of what I mean: > > >> (10..50) == 15 > => false > >> (10..50) === 15 > => true > >> 10..50 === 15 > ArgumentError: bad value for range > from (irb):6 > >> 15 === 10..50 > ArgumentError: bad value for range > from (irb):7 > >> 15 === (10..50) > => false > >> > > Hope this helps, > > Sam > > --- > http://sam.aaron.name > > > _______________________________________________ > rspec-users mailing list > rspec-users at rubyforge.org > http://rubyforge.org/mailman/listinfo/rspec-users >-------------- next part -------------- An HTML attachment was scrubbed... URL: http://rubyforge.org/pipermail/rspec-users/attachments/20070527/188c97e6/attachment.html
On 5/27/07, Andrew WC Brown <omen.king at gmail.com> wrote:> it "should require a password within the range of 5..40 characters" do > person = create(:last_name => "ruby_tuesday") > person.password.should_not be_nil > (5..40) === person.password.length.should > end > > Its true, it really works, tell all your friends!How does that verify that a person will reject a password length of 4 or 41?> > > On 5/27/07, Sam Aaron <sam.maillists at googlemail.com > wrote: > > > > On 27 May 2007, at 8.31 pm, Andrew WC Brown wrote: > > > > > > I thought this would work: > > > person.password.length.should == (5..40) > > > > > > > I think that in this case, you want to use the === operator when > > comparing a number with a range. Instead of trying to see if both of > > the objects (the number and the range) are the same, the === operator > > checks to see if the number is within the range. > > > > Also, make sure you surround your range with parenthesis (which you > > are already doing), and put the range on the left hand side of the > > === operator for it to work. Have a look at this quick irb session > > for an example of what I mean: > > > > >> (10..50) == 15 > > => false > > >> (10..50) === 15 > > => true > > >> 10..50 === 15 > > ArgumentError: bad value for range > > from (irb):6 > > >> 15 === 10..50 > > ArgumentError: bad value for range > > from (irb):7 > > >> 15 === (10..50) > > => false > > >> > > > > Hope this helps, > > > > Sam > > > > --- > > http://sam.aaron.name > > > > > > _______________________________________________ > > rspec-users mailing list > > rspec-users at rubyforge.org > > http://rubyforge.org/mailman/listinfo/rspec-users > > > > > _______________________________________________ > rspec-users mailing list > rspec-users at rubyforge.org > http://rubyforge.org/mailman/listinfo/rspec-users >
On 5/27/07, David Chelimsky <dchelimsky at gmail.com> wrote:> > > > How does that verify that a person will reject a password length of 4 or > 41?I have compiled a collection of rspec matchers to be used when testing rails validations: http://svn.integrumtech.com/public/plugins/rspec_on_rails_matchers If you use this library then you would spec out the password length as follows: it do @user.should validate_length_of(:password, 5..40) end Behind the scenes this matcher attempts to set the password to a value outside of the range and then calls valid? I obviously need to finish this plugin, and get it properly documented, but in the mean time comments/suggestions welcome/ Josh -- Josh Knowles joshknowles at gmail.com http://joshknowles.com -------------- next part -------------- An HTML attachment was scrubbed... URL: http://rubyforge.org/pipermail/rspec-users/attachments/20070527/085c9e16/attachment-0001.html
I''m testing the validation validates_length_of :password, :within => 5..40 In this case I should be receiving a failure but I''m not :( it "should require a password within the range of 5..40 characters" do person = create(:password => ''a'') person.password.should_not be_nil person.should validate_length_of(:password, 5..40) end I''m an amature tester, would you tell me how I should verify? I haven''t fully grasped setting testing goals On 5/27/07, David Chelimsky <dchelimsky at gmail.com> wrote:> > On 5/27/07, Andrew WC Brown <omen.king at gmail.com> wrote: > > it "should require a password within the range of 5..40 characters" do > > person = create(:last_name => "ruby_tuesday") > > person.password.should_not be_nil > > (5..40) === person.password.length.should > > end > > > > Its true, it really works, tell all your friends! > > How does that verify that a person will reject a password length of 4 or > 41? > > > > > > > On 5/27/07, Sam Aaron <sam.maillists at googlemail.com > wrote: > > > > > > On 27 May 2007, at 8.31 pm, Andrew WC Brown wrote: > > > > > > > > I thought this would work: > > > > person.password.length.should == (5..40) > > > > > > > > > > I think that in this case, you want to use the === operator when > > > comparing a number with a range. Instead of trying to see if both of > > > the objects (the number and the range) are the same, the === operator > > > checks to see if the number is within the range. > > > > > > Also, make sure you surround your range with parenthesis (which you > > > are already doing), and put the range on the left hand side of the > > > === operator for it to work. Have a look at this quick irb session > > > for an example of what I mean: > > > > > > >> (10..50) == 15 > > > => false > > > >> (10..50) === 15 > > > => true > > > >> 10..50 === 15 > > > ArgumentError: bad value for range > > > from (irb):6 > > > >> 15 === 10..50 > > > ArgumentError: bad value for range > > > from (irb):7 > > > >> 15 === (10..50) > > > => false > > > >> > > > > > > Hope this helps, > > > > > > Sam > > > > > > --- > > > http://sam.aaron.name > > > > > > > > > _______________________________________________ > > > rspec-users mailing list > > > rspec-users at rubyforge.org > > > http://rubyforge.org/mailman/listinfo/rspec-users > > > > > > > > > _______________________________________________ > > rspec-users mailing list > > rspec-users at rubyforge.org > > http://rubyforge.org/mailman/listinfo/rspec-users > > > _______________________________________________ > rspec-users mailing list > rspec-users at rubyforge.org > http://rubyforge.org/mailman/listinfo/rspec-users >-------------- next part -------------- An HTML attachment was scrubbed... URL: http://rubyforge.org/pipermail/rspec-users/attachments/20070527/ed416647/attachment.html
On 5/27/07, Andrew WC Brown <omen.king at gmail.com> wrote:> I''m testing the validation > validates_length_of :password, :within => 5..40 > > In this case I should be receiving a failure but I''m not :( > > it "should require a password within the range of 5..40 characters" do > person = create(:password => ''a'') > person.password.should_not be_nil > person.should validate_length_of(:password, 5..40) > end > > I''m an amature tester, would you tell me how I should verify? > I haven''t fully grasped setting testing goalsThe behaviour you''re trying to describe is that the User should require that passwords bear certain qualities - in this case a length between 5 and 40. So you need to ask yourself how the User should behave when this requirement is violated, and then specify that it behaves that way. Here''s how I might handle this: describe User do it "should reject a password of length 4" do User.create(:password => "1234").should have(1).error_on(:password) end it "should accept a password of length 5" do User.create(:password => "12345").should have(0).errors_on(:password) end it "should accept a password of length 40" do User.create( :password => "1234567890123456789012345678901234567890" ).should have(0).errors_on(:password) end it "should reject a password of length 41" do User.create( :password => "12345678901234567890123456789012345678901" ).should have(1).error_on(:password) end end And possibly add something about the specific error message in one of the cases. That make sense?> > On 5/27/07, David Chelimsky <dchelimsky at gmail.com> wrote: > > > > On 5/27/07, Andrew WC Brown <omen.king at gmail.com > wrote: > > > it "should require a password within the range of 5..40 characters" do > > > person = create(:last_name => "ruby_tuesday") > > > person.password.should_not be_nil > > > (5..40) === person.password.length.should > > > end > > > > > > Its true, it really works, tell all your friends! > > > > How does that verify that a person will reject a password length of 4 or > 41? > > > > > > > > > > > On 5/27/07, Sam Aaron <sam.maillists at googlemail.com > wrote: > > > > > > > > On 27 May 2007, at 8.31 pm, Andrew WC Brown wrote: > > > > > > > > > > I thought this would work: > > > > > person.password.length.should == (5..40) > > > > > > > > > > > > > I think that in this case, you want to use the === operator when > > > > comparing a number with a range. Instead of trying to see if both of > > > > the objects (the number and the range) are the same, the === operator > > > > checks to see if the number is within the range. > > > > > > > > Also, make sure you surround your range with parenthesis (which you > > > > are already doing), and put the range on the left hand side of the > > > > === operator for it to work. Have a look at this quick irb session > > > > for an example of what I mean: > > > > > > > > >> (10..50) == 15 > > > > => false > > > > >> (10..50) === 15 > > > > => true > > > > >> 10..50 === 15 > > > > ArgumentError: bad value for range > > > > from (irb):6 > > > > >> 15 === 10..50 > > > > ArgumentError: bad value for range > > > > from (irb):7 > > > > >> 15 === (10..50) > > > > => false > > > > >> > > > > > > > > Hope this helps, > > > > > > > > Sam > > > > > > > > --- > > > > http://sam.aaron.name > > > > > > > > > > > > _______________________________________________ > > > > rspec-users mailing list > > > > rspec-users at rubyforge.org > > > > http://rubyforge.org/mailman/listinfo/rspec-users > > > > > > > > > > > > > _______________________________________________ > > > rspec-users mailing list > > > rspec-users at rubyforge.org > > > http://rubyforge.org/mailman/listinfo/rspec-users > > > > > _______________________________________________ > > rspec-users mailing list > > rspec-users at rubyforge.org > > http://rubyforge.org/mailman/listinfo/rspec-users > > > > > _______________________________________________ > rspec-users mailing list > rspec-users at rubyforge.org > http://rubyforge.org/mailman/listinfo/rspec-users >
That actaully makes alot of sense now. Does this have to do with something State vs Behaviour verfication? I''ve been reading alot about stubs and mocks. It took a long which to comprehend. On 5/28/07, David Chelimsky <dchelimsky at gmail.com> wrote:> > On 5/27/07, Andrew WC Brown <omen.king at gmail.com> wrote: > > I''m testing the validation > > validates_length_of :password, :within => 5..40 > > > > In this case I should be receiving a failure but I''m not :( > > > > it "should require a password within the range of 5..40 characters" do > > person = create(:password => ''a'') > > person.password.should_not be_nil > > person.should validate_length_of(:password, 5..40) > > end > > > > I''m an amature tester, would you tell me how I should verify? > > I haven''t fully grasped setting testing goals > > The behaviour you''re trying to describe is that the User should > require that passwords bear certain qualities - in this case a length > between 5 and 40. So you need to ask yourself how the User should > behave when this requirement is violated, and then specify that it > behaves that way. > > Here''s how I might handle this: > > describe User do > it "should reject a password of length 4" do > User.create(:password => "1234").should have(1).error_on(:password) > end > it "should accept a password of length 5" do > User.create(:password => "12345").should have(0).errors_on(:password) > end > it "should accept a password of length 40" do > User.create( > :password => "1234567890123456789012345678901234567890" > ).should have(0).errors_on(:password) > end > it "should reject a password of length 41" do > User.create( > :password => "12345678901234567890123456789012345678901" > ).should have(1).error_on(:password) > end > end > > And possibly add something about the specific error message in one of the > cases. > > That make sense? > > > > > On 5/27/07, David Chelimsky <dchelimsky at gmail.com> wrote: > > > > > > On 5/27/07, Andrew WC Brown <omen.king at gmail.com > wrote: > > > > it "should require a password within the range of 5..40 > characters" do > > > > person = create(:last_name => "ruby_tuesday") > > > > person.password.should_not be_nil > > > > (5..40) === person.password.length.should > > > > end > > > > > > > > Its true, it really works, tell all your friends! > > > > > > How does that verify that a person will reject a password length of 4 > or > > 41? > > > > > > > > > > > > > > > On 5/27/07, Sam Aaron <sam.maillists at googlemail.com > wrote: > > > > > > > > > > On 27 May 2007, at 8.31 pm, Andrew WC Brown wrote: > > > > > > > > > > > > I thought this would work: > > > > > > person.password.length.should == (5..40) > > > > > > > > > > > > > > > > I think that in this case, you want to use the === operator when > > > > > comparing a number with a range. Instead of trying to see if both > of > > > > > the objects (the number and the range) are the same, the ==> operator > > > > > checks to see if the number is within the range. > > > > > > > > > > Also, make sure you surround your range with parenthesis (which > you > > > > > are already doing), and put the range on the left hand side of the > > > > > === operator for it to work. Have a look at this quick irb session > > > > > for an example of what I mean: > > > > > > > > > > >> (10..50) == 15 > > > > > => false > > > > > >> (10..50) === 15 > > > > > => true > > > > > >> 10..50 === 15 > > > > > ArgumentError: bad value for range > > > > > from (irb):6 > > > > > >> 15 === 10..50 > > > > > ArgumentError: bad value for range > > > > > from (irb):7 > > > > > >> 15 === (10..50) > > > > > => false > > > > > >> > > > > > > > > > > Hope this helps, > > > > > > > > > > Sam > > > > > > > > > > --- > > > > > http://sam.aaron.name > > > > > > > > > > > > > > > _______________________________________________ > > > > > rspec-users mailing list > > > > > rspec-users at rubyforge.org > > > > > http://rubyforge.org/mailman/listinfo/rspec-users > > > > > > > > > > > > > > > > > _______________________________________________ > > > > rspec-users mailing list > > > > rspec-users at rubyforge.org > > > > http://rubyforge.org/mailman/listinfo/rspec-users > > > > > > > _______________________________________________ > > > rspec-users mailing list > > > rspec-users at rubyforge.org > > > http://rubyforge.org/mailman/listinfo/rspec-users > > > > > > > > > _______________________________________________ > > rspec-users mailing list > > rspec-users at rubyforge.org > > http://rubyforge.org/mailman/listinfo/rspec-users > > > _______________________________________________ > rspec-users mailing list > rspec-users at rubyforge.org > http://rubyforge.org/mailman/listinfo/rspec-users >-------------- next part -------------- An HTML attachment was scrubbed... URL: http://rubyforge.org/pipermail/rspec-users/attachments/20070528/62a81812/attachment.html
On 5/28/07, Andrew WC Brown <omen.king at gmail.com> wrote:> That actaully makes alot of sense now. > Does this have to do with something State vs Behaviour verfication?Not really - the 4 examples are more about boundary testing - testing at, above and below any boundaries to ensure that your conditional logic works as expected. In fact, I failed to do "all 3 sides" of the boundaries, so you might want to add examples for 6 and 39 to round things out.> I''ve been reading alot about stubs and mocks. > It took a long which to comprehend. > > > On 5/28/07, David Chelimsky <dchelimsky at gmail.com> wrote: > > On 5/27/07, Andrew WC Brown <omen.king at gmail.com> wrote: > > > I''m testing the validation > > > validates_length_of :password, :within => 5..40 > > > > > > In this case I should be receiving a failure but I''m not :( > > > > > > it "should require a password within the range of 5..40 characters" do > > > person = create(:password => ''a'') > > > person.password.should_not be_nil > > > person.should validate_length_of(:password, 5..40) > > > end > > > > > > I''m an amature tester, would you tell me how I should verify? > > > I haven''t fully grasped setting testing goals > > > > The behaviour you''re trying to describe is that the User should > > require that passwords bear certain qualities - in this case a length > > between 5 and 40. So you need to ask yourself how the User should > > behave when this requirement is violated, and then specify that it > > behaves that way. > > > > Here''s how I might handle this: > > > > describe User do > > it "should reject a password of length 4" do > > User.create(:password => "1234").should have(1).error_on(:password) > > end > > it "should accept a password of length 5" do > > User.create(:password => "12345").should have(0).errors_on(:password) > > end > > it "should accept a password of length 40" do > > User.create( > > :password => > "1234567890123456789012345678901234567890" > > ).should have(0).errors_on(:password) > > end > > it "should reject a password of length 41" do > > User.create ( > > :password => > "12345678901234567890123456789012345678901" > > ).should have(1).error_on(:password) > > end > > end > > > > And possibly add something about the specific error message in one of the > cases. > > > > That make sense? > > > > > > > > On 5/27/07, David Chelimsky <dchelimsky at gmail.com> wrote: > > > > > > > > On 5/27/07, Andrew WC Brown < omen.king at gmail.com > wrote: > > > > > it "should require a password within the range of 5..40 > characters" do > > > > > person = create(:last_name => "ruby_tuesday") > > > > > person.password.should_not be_nil > > > > > (5..40) === person.password.length.should > > > > > end > > > > > > > > > > Its true, it really works, tell all your friends! > > > > > > > > How does that verify that a person will reject a password length of 4 > or > > > 41? > > > > > > > > > > > > > > > > > > > On 5/27/07, Sam Aaron < sam.maillists at googlemail.com > wrote: > > > > > > > > > > > > On 27 May 2007, at 8.31 pm, Andrew WC Brown wrote: > > > > > > > > > > > > > > I thought this would work: > > > > > > > person.password.length.should == (5..40) > > > > > > > > > > > > > > > > > > > I think that in this case, you want to use the === operator when > > > > > > comparing a number with a range. Instead of trying to see if both > of > > > > > > the objects (the number and the range) are the same, the ==> operator > > > > > > checks to see if the number is within the range. > > > > > > > > > > > > Also, make sure you surround your range with parenthesis (which > you > > > > > > are already doing), and put the range on the left hand side of the > > > > > > === operator for it to work. Have a look at this quick irb session > > > > > > for an example of what I mean: > > > > > > > > > > > > >> (10..50) == 15 > > > > > > => false > > > > > > >> (10..50) === 15 > > > > > > => true > > > > > > >> 10..50 === 15 > > > > > > ArgumentError: bad value for range > > > > > > from (irb):6 > > > > > > >> 15 === 10..50 > > > > > > ArgumentError: bad value for range > > > > > > from (irb):7 > > > > > > >> 15 === (10..50) > > > > > > => false > > > > > > >> > > > > > > > > > > > > Hope this helps, > > > > > > > > > > > > Sam > > > > > > > > > > > > --- > > > > > > http://sam.aaron.name > > > > > > > > > > > > > > > > > > _______________________________________________ > > > > > > rspec-users mailing list > > > > > > rspec-users at rubyforge.org > > > > > > http://rubyforge.org/mailman/listinfo/rspec-users > > > > > > > > > > > > > > > > > > > > > _______________________________________________ > > > > > rspec-users mailing list > > > > > rspec-users at rubyforge.org > > > > > http://rubyforge.org/mailman/listinfo/rspec-users > > > > > > > > > _______________________________________________ > > > > rspec-users mailing list > > > > rspec-users at rubyforge.org > > > > http://rubyforge.org/mailman/listinfo/rspec-users > > > > > > > > > > > > > _______________________________________________ > > > rspec-users mailing list > > > rspec-users at rubyforge.org > > > http://rubyforge.org/mailman/listinfo/rspec-users > > > > > _______________________________________________ > > rspec-users mailing list > > rspec-users at rubyforge.org > > http://rubyforge.org/mailman/listinfo/rspec-users > > > > > _______________________________________________ > rspec-users mailing list > rspec-users at rubyforge.org > http://rubyforge.org/mailman/listinfo/rspec-users >