Dan Brooking
2013-Mar-16 12:56 UTC
[rspec-users] stubbed methods are not returning what I''ve stubbed them to return
I''m working on a small Sintra app and am having trouble getting my stub to return what I want it to. I''ve been searching and found quite a few with this question but no real answers. I also posted this to the sinatrarb google group in case it''s an issue there. I have a helper method that returns a random string. I''m hoping it''s something very simple I''m doing wrong def random_string(length) (0..length).map{ rand(36).to_s(36) }.join end I have my test written as follows: describe "#random_string" do it "returns a random string" do #Sinatra::Application.any_instance.stub(:random_string).and_return("abcdef") Sinatra::Application.should_receive(:random_string).with(6).and_return(''abcdef'') str = random_string(6) str.should == "abcdef" end end I have tried both lines shown in the code, and both times, the code runs. Yet my tests are still failing. It doesn''t look like the stub is taking. My failure looks like: #random_string returns a random string Failure/Error: str.should == "abcdef" expected: "abcdef" got: "xcz0g7a" (using ==) Any ideas? -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://rubyforge.org/pipermail/rspec-users/attachments/20130316/5b99d287/attachment.html>
David Chelimsky
2013-Mar-16 13:58 UTC
[rspec-users] stubbed methods are not returning what I''ve stubbed them to return
On Sat, Mar 16, 2013 at 7:56 AM, Dan Brooking <dmbrooking at gmail.com> wrote:> I''m working on a small Sintra app and am having trouble getting my stub to > return what I want it to. I''ve been searching and found quite a few with > this question but no real answers. I also posted this to the sinatrarb > google group in case it''s an issue there. > > I have a helper method that returns a random string. I''m hoping it''s > something very simple I''m doing wrong > > def random_string(length) > (0..length).map{ rand(36).to_s(36) }.join > end > > > I have my test written as follows: > > describe "#random_string" do > it "returns a random string" do > #Sinatra::Application.any_instance.stub(:random_string).and_return("abcdef") > Sinatra::Application.should_receive(:random_string).with(6).and_return(''abcdef'') > str = random_string(6)Here ^^ random_string is being called in the context of the example, not the Sinatra::Application class or any of its instances. I don''t know how Sinatra includes helper modules, but assuming that includes them in the Sinatra::Application object, then this should work: Sinatra::Application.should_receive(:random_string).with(6).and_return(''abcdef'') Sinatra::Application.random_string(6).should eq ''abcdef'' HTH, David> str.should == "abcdef" > end > end > > > I have tried both lines shown in the code, and both times, the code runs. > Yet my tests are still failing. It doesn''t look like the stub is taking. My > failure looks like: > > #random_string returns a random string > Failure/Error: str.should == "abcdef" > expected: "abcdef" > got: "xcz0g7a" (using ==) > > Any ideas? > > _______________________________________________ > rspec-users mailing list > rspec-users at rubyforge.org > http://rubyforge.org/mailman/listinfo/rspec-users
Dan Brooking
2013-Mar-16 14:05 UTC
[rspec-users] stubbed methods are not returning what I''ve stubbed them to return
OK, so I think based on this, I''m doing it right and it''s a Sinatra issue. I did as you suggested and made a call to Sinatra::Application.random_string and now my error is "private method `random_string'' called for Sinatra::Application:Class". So, like I said, looks to me like a Sintra specific issue where I need to reference it in a certain way. It''s such a small method, I don''t really need to test this but it''s used in other modules so I wanted to isolate this to ensure I''ve got the stubbing down right. Thanks! On Sat, Mar 16, 2013 at 9:58 AM, David Chelimsky <dchelimsky at gmail.com>wrote:> On Sat, Mar 16, 2013 at 7:56 AM, Dan Brooking <dmbrooking at gmail.com> > wrote: > > I''m working on a small Sintra app and am having trouble getting my stub > to > > return what I want it to. I''ve been searching and found quite a few with > > this question but no real answers. I also posted this to the sinatrarb > > google group in case it''s an issue there. > > > > I have a helper method that returns a random string. I''m hoping it''s > > something very simple I''m doing wrong > > > > def random_string(length) > > (0..length).map{ rand(36).to_s(36) }.join > > end > > > > > > I have my test written as follows: > > > > describe "#random_string" do > > it "returns a random string" do > > > #Sinatra::Application.any_instance.stub(:random_string).and_return("abcdef") > > > Sinatra::Application.should_receive(:random_string).with(6).and_return(''abcdef'') > > str = random_string(6) > > Here ^^ random_string is being called in the context of the example, > not the Sinatra::Application class or any of its instances. I don''t > know how Sinatra includes helper modules, but assuming that includes > them in the Sinatra::Application object, then this should work: > > > Sinatra::Application.should_receive(:random_string).with(6).and_return(''abcdef'') > Sinatra::Application.random_string(6).should eq ''abcdef'' > > HTH, > David > > > str.should == "abcdef" > > end > > end > > > > > > I have tried both lines shown in the code, and both times, the code runs. > > Yet my tests are still failing. It doesn''t look like the stub is > taking. My > > failure looks like: > > > > #random_string returns a random string > > Failure/Error: str.should == "abcdef" > > expected: "abcdef" > > got: "xcz0g7a" (using ==) > > > > Any ideas? > > > > _______________________________________________ > > 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/20130316/04de7e04/attachment-0001.html>
Dan Brooking
2013-Mar-16 14:11 UTC
[rspec-users] stubbed methods are not returning what I''ve stubbed them to return
I got it... I called it using instance_eval. def app Sinatra::Application end describe "#random_string" do it "returns a random string" do app.should_receive(:random_string).with(6).and_return(''abcdef'') str = app.instance_eval("random_string(6)") str.should == "abcdef" end end On Sat, Mar 16, 2013 at 10:05 AM, Dan Brooking <dmbrooking at gmail.com> wrote:> OK, so I think based on this, I''m doing it right and it''s a Sinatra issue. > I did as you suggested and made a call to > Sinatra::Application.random_string and now my error is "private method > `random_string'' called for Sinatra::Application:Class". > > So, like I said, looks to me like a Sintra specific issue where I need to > reference it in a certain way. It''s such a small method, I don''t really > need to test this but it''s used in other modules so I wanted to isolate > this to ensure I''ve got the stubbing down right. > > Thanks! > > > On Sat, Mar 16, 2013 at 9:58 AM, David Chelimsky <dchelimsky at gmail.com>wrote: > >> On Sat, Mar 16, 2013 at 7:56 AM, Dan Brooking <dmbrooking at gmail.com> >> wrote: >> > I''m working on a small Sintra app and am having trouble getting my stub >> to >> > return what I want it to. I''ve been searching and found quite a few >> with >> > this question but no real answers. I also posted this to the sinatrarb >> > google group in case it''s an issue there. >> > >> > I have a helper method that returns a random string. I''m hoping it''s >> > something very simple I''m doing wrong >> > >> > def random_string(length) >> > (0..length).map{ rand(36).to_s(36) }.join >> > end >> > >> > >> > I have my test written as follows: >> > >> > describe "#random_string" do >> > it "returns a random string" do >> > >> #Sinatra::Application.any_instance.stub(:random_string).and_return("abcdef") >> > >> Sinatra::Application.should_receive(:random_string).with(6).and_return(''abcdef'') >> > str = random_string(6) >> >> Here ^^ random_string is being called in the context of the example, >> not the Sinatra::Application class or any of its instances. I don''t >> know how Sinatra includes helper modules, but assuming that includes >> them in the Sinatra::Application object, then this should work: >> >> >> Sinatra::Application.should_receive(:random_string).with(6).and_return(''abcdef'') >> Sinatra::Application.random_string(6).should eq ''abcdef'' >> >> HTH, >> David >> >> > str.should == "abcdef" >> > end >> > end >> > >> > >> > I have tried both lines shown in the code, and both times, the code >> runs. >> > Yet my tests are still failing. It doesn''t look like the stub is >> taking. My >> > failure looks like: >> > >> > #random_string returns a random string >> > Failure/Error: str.should == "abcdef" >> > expected: "abcdef" >> > got: "xcz0g7a" (using ==) >> > >> > Any ideas? >> > >> > _______________________________________________ >> > 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/20130316/7e652024/attachment.html>
David Chelimsky
2013-Mar-16 14:28 UTC
[rspec-users] stubbed methods are not returning what I''ve stubbed them to return
On Sat, Mar 16, 2013 at 9:11 AM, Dan Brooking <dmbrooking at gmail.com> wrote:> I got it... > > I called it using instance_eval. > > def app > Sinatra::Application > end > > describe "#random_string" do > it "returns a random string" do > app.should_receive(:random_string).with(6).and_return(''abcdef'') > str = app.instance_eval("random_string(6)") > str.should == "abcdef" > end > endIt might pass, but this example tells you nothing about how the random_string method should work. What is it that you''re actually wanting to specify here?> > > On Sat, Mar 16, 2013 at 10:05 AM, Dan Brooking <dmbrooking at gmail.com> wrote: >> >> OK, so I think based on this, I''m doing it right and it''s a Sinatra issue. >> I did as you suggested and made a call to Sinatra::Application.random_string >> and now my error is "private method `random_string'' called for >> Sinatra::Application:Class". >> >> So, like I said, looks to me like a Sintra specific issue where I need to >> reference it in a certain way. It''s such a small method, I don''t really >> need to test this but it''s used in other modules so I wanted to isolate this >> to ensure I''ve got the stubbing down right. >> >> Thanks! >> >> >> On Sat, Mar 16, 2013 at 9:58 AM, David Chelimsky <dchelimsky at gmail.com> >> wrote: >>> >>> On Sat, Mar 16, 2013 at 7:56 AM, Dan Brooking <dmbrooking at gmail.com> >>> wrote: >>> > I''m working on a small Sintra app and am having trouble getting my stub >>> > to >>> > return what I want it to. I''ve been searching and found quite a few >>> > with >>> > this question but no real answers. I also posted this to the sinatrarb >>> > google group in case it''s an issue there. >>> > >>> > I have a helper method that returns a random string. I''m hoping it''s >>> > something very simple I''m doing wrong >>> > >>> > def random_string(length) >>> > (0..length).map{ rand(36).to_s(36) }.join >>> > end >>> > >>> > >>> > I have my test written as follows: >>> > >>> > describe "#random_string" do >>> > it "returns a random string" do >>> > >>> > #Sinatra::Application.any_instance.stub(:random_string).and_return("abcdef") >>> > >>> > Sinatra::Application.should_receive(:random_string).with(6).and_return(''abcdef'') >>> > str = random_string(6) >>> >>> Here ^^ random_string is being called in the context of the example, >>> not the Sinatra::Application class or any of its instances. I don''t >>> know how Sinatra includes helper modules, but assuming that includes >>> them in the Sinatra::Application object, then this should work: >>> >>> >>> Sinatra::Application.should_receive(:random_string).with(6).and_return(''abcdef'') >>> Sinatra::Application.random_string(6).should eq ''abcdef'' >>> >>> HTH, >>> David >>> >>> > str.should == "abcdef" >>> > end >>> > end >>> > >>> > >>> > I have tried both lines shown in the code, and both times, the code >>> > runs. >>> > Yet my tests are still failing. It doesn''t look like the stub is >>> > taking. My >>> > failure looks like: >>> > >>> > #random_string returns a random string >>> > Failure/Error: str.should == "abcdef" >>> > expected: "abcdef" >>> > got: "xcz0g7a" (using ==) >>> > >>> > Any ideas? >>> > >>> > _______________________________________________ >>> > 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
Dan Brooking
2013-Mar-16 14:42 UTC
[rspec-users] stubbed methods are not returning what I''ve stubbed them to return
Yes I realize that :) I actually need to stub this method out in some of my other methods... Since I''m still figuring out how stubbing works, I wanted to strip it down to it''s most basic. So in essence, I guess I am testing my stub with this code. So now I know that if I throw this stub in my other tests, I should be good to go. On Sat, Mar 16, 2013 at 10:28 AM, David Chelimsky <dchelimsky at gmail.com>wrote:> On Sat, Mar 16, 2013 at 9:11 AM, Dan Brooking <dmbrooking at gmail.com> > wrote: > > I got it... > > > > I called it using instance_eval. > > > > def app > > Sinatra::Application > > end > > > > describe "#random_string" do > > it "returns a random string" do > > app.should_receive(:random_string).with(6).and_return(''abcdef'') > > str = app.instance_eval("random_string(6)") > > str.should == "abcdef" > > end > > end > > It might pass, but this example tells you nothing about how the > random_string method should work. What is it that you''re actually > wanting to specify here? > > > > > > > On Sat, Mar 16, 2013 at 10:05 AM, Dan Brooking <dmbrooking at gmail.com> > wrote: > >> > >> OK, so I think based on this, I''m doing it right and it''s a Sinatra > issue. > >> I did as you suggested and made a call to > Sinatra::Application.random_string > >> and now my error is "private method `random_string'' called for > >> Sinatra::Application:Class". > >> > >> So, like I said, looks to me like a Sintra specific issue where I need > to > >> reference it in a certain way. It''s such a small method, I don''t really > >> need to test this but it''s used in other modules so I wanted to isolate > this > >> to ensure I''ve got the stubbing down right. > >> > >> Thanks! > >> > >> > >> On Sat, Mar 16, 2013 at 9:58 AM, David Chelimsky <dchelimsky at gmail.com> > >> wrote: > >>> > >>> On Sat, Mar 16, 2013 at 7:56 AM, Dan Brooking <dmbrooking at gmail.com> > >>> wrote: > >>> > I''m working on a small Sintra app and am having trouble getting my > stub > >>> > to > >>> > return what I want it to. I''ve been searching and found quite a few > >>> > with > >>> > this question but no real answers. I also posted this to the > sinatrarb > >>> > google group in case it''s an issue there. > >>> > > >>> > I have a helper method that returns a random string. I''m hoping it''s > >>> > something very simple I''m doing wrong > >>> > > >>> > def random_string(length) > >>> > (0..length).map{ rand(36).to_s(36) }.join > >>> > end > >>> > > >>> > > >>> > I have my test written as follows: > >>> > > >>> > describe "#random_string" do > >>> > it "returns a random string" do > >>> > > >>> > > #Sinatra::Application.any_instance.stub(:random_string).and_return("abcdef") > >>> > > >>> > > Sinatra::Application.should_receive(:random_string).with(6).and_return(''abcdef'') > >>> > str = random_string(6) > >>> > >>> Here ^^ random_string is being called in the context of the example, > >>> not the Sinatra::Application class or any of its instances. I don''t > >>> know how Sinatra includes helper modules, but assuming that includes > >>> them in the Sinatra::Application object, then this should work: > >>> > >>> > >>> > Sinatra::Application.should_receive(:random_string).with(6).and_return(''abcdef'') > >>> Sinatra::Application.random_string(6).should eq ''abcdef'' > >>> > >>> HTH, > >>> David > >>> > >>> > str.should == "abcdef" > >>> > end > >>> > end > >>> > > >>> > > >>> > I have tried both lines shown in the code, and both times, the code > >>> > runs. > >>> > Yet my tests are still failing. It doesn''t look like the stub is > >>> > taking. My > >>> > failure looks like: > >>> > > >>> > #random_string returns a random string > >>> > Failure/Error: str.should == "abcdef" > >>> > expected: "abcdef" > >>> > got: "xcz0g7a" (using ==) > >>> > > >>> > Any ideas? > >>> > > >>> > _______________________________________________ > >>> > 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/20130316/cf0c172e/attachment-0001.html>