Hello everyone:
I am quit new to View test using rspec. I want to write spec for a
partial, which is rendered by a controller. However, the controller does not
pass data to the partial using instance variables, it uses symbol variable
instead. I read the example of view spec provided in the website. But the
example is using instance variable. So I am looking for a way of assigning
my test data to the partial to be tested. I would like to show an my code
below:
class MyController
def index
hash = {...#data provided here}
render :partial=>''index'', :layout=>false,
:locals=>{:hash=>hash}
end
end
_index.rhtml
......#unrelated code omitted
<script>
var data = <%= hash %>;
<!-- process data here -->
</script>
In my spec, I used assigns[:hash] = my_own_data, but an error occurred,
saying that "undefined local variable or method ''hash''
".
How can I assign my own data to hash in my view spec?
Thank you!
--
View this message in context:
http://www.nabble.com/Can-not-%27assigns%27-value-in-View-test-tf4428018.html#a12631788
Sent from the rspec-users mailing list archive at Nabble.com.
Evan David Light
2007-Sep-12 19:57 UTC
[rspec-users] Can not ''assigns'' value in View test
Granted that I''m new too; however, assigns[:hash] creates a member variable @hash that is made available to the view. Maybe that''s the problem? Modify your view to use @hash instead. On Sep 12, 2007, at 5:20 AM, Shaker wrote:> > Hello everyone: > I am quit new to View test using rspec. I want to write spec for a > partial, which is rendered by a controller. However, the controller > does not > pass data to the partial using instance variables, it uses symbol > variable > instead. I read the example of view spec provided in the website. > But the > example is using instance variable. So I am looking for a way of > assigning > my test data to the partial to be tested. I would like to show an > my code > below: > class MyController > def index > hash = {...#data provided here} > render :partial=>''index'', :layout=>false, :locals=>{:hash=>hash} > end > end > > _index.rhtml > ......#unrelated code omitted > <script> > var data = <%= hash %>; > <!-- process data here --> > </script> > > In my spec, I used assigns[:hash] = my_own_data, but an error > occurred, > saying that "undefined local variable or method ''hash'' ". > How can I assign my own data to hash in my view spec? > Thank you! > > -- > View this message in context: http://www.nabble.com/Can-not-% > 27assigns%27-value-in-View-test-tf4428018.html#a12631788 > Sent from the rspec-users mailing list archive at Nabble.com. > > _______________________________________________ > rspec-users mailing list > rspec-users at rubyforge.org > http://rubyforge.org/mailman/listinfo/rspec-users
David Chelimsky
2007-Sep-12 21:36 UTC
[rspec-users] Can not ''assigns'' value in View test
On 9/12/07, Evan David Light <evan at tiggerpalace.com> wrote:> Granted that I''m new too; however, assigns[:hash] creates a member > variable @hash that is made available to the view. Maybe that''s the > problem? Modify your view to use @hash instead.http://rspec.rubyforge.org/documentation/rails/writing/views.html> > On Sep 12, 2007, at 5:20 AM, Shaker wrote: > > > > > Hello everyone: > > I am quit new to View test using rspec. I want to write spec for a > > partial, which is rendered by a controller. However, the controller > > does not > > pass data to the partial using instance variables, it uses symbol > > variable > > instead. I read the example of view spec provided in the website. > > But the > > example is using instance variable. So I am looking for a way of > > assigning > > my test data to the partial to be tested. I would like to show an > > my code > > below: > > class MyController > > def index > > hash = {...#data provided here} > > render :partial=>''index'', :layout=>false, :locals=>{:hash=>hash} > > end > > end > > > > _index.rhtml > > ......#unrelated code omitted > > <script> > > var data = <%= hash %>; > > <!-- process data here --> > > </script> > > > > In my spec, I used assigns[:hash] = my_own_data, but an error > > occurred, > > saying that "undefined local variable or method ''hash'' ". > > How can I assign my own data to hash in my view spec? > > Thank you! > > > > -- > > View this message in context: http://www.nabble.com/Can-not-% > > 27assigns%27-value-in-View-test-tf4428018.html#a12631788 > > Sent from the rspec-users mailing list archive at Nabble.com. > > > > _______________________________________________ > > 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 >
Unfortunately, I am not supposed to change the code inside the partial. That''s why I posted this message. I am trying to find a way of tackling this problem. Because I am going to test tens of hundreds of partials, most of which are using the symbols rather than instance variable. David Chelimsky-2 wrote:> > On 9/12/07, Evan David Light <evan at tiggerpalace.com> wrote: >> Granted that I''m new too; however, assigns[:hash] creates a >> member >> variable @hash that is made available to the view. Maybe that''s the >> problem? Modify your view to use @hash instead. > > http://rspec.rubyforge.org/documentation/rails/writing/views.html > >> >> On Sep 12, 2007, at 5:20 AM, Shaker wrote: >> >> > >> > Hello everyone: >> > I am quit new to View test using rspec. I want to write spec for a >> > partial, which is rendered by a controller. However, the controller >> > does not >> > pass data to the partial using instance variables, it uses symbol >> > variable >> > instead. I read the example of view spec provided in the website. >> > But the >> > example is using instance variable. So I am looking for a way of >> > assigning >> > my test data to the partial to be tested. I would like to show an >> > my code >> > below: >> > class MyController >> > def index >> > hash = {...#data provided here} >> > render :partial=>''index'', :layout=>false, :locals=>{:hash=>hash} >> > end >> > end >> > >> > _index.rhtml >> > ......#unrelated code omitted >> > <script> >> > var data = <%= hash %>; >> > <!-- process data here --> >> > </script> >> > >> > In my spec, I used assigns[:hash] = my_own_data, but an error >> > occurred, >> > saying that "undefined local variable or method ''hash'' ". >> > How can I assign my own data to hash in my view spec? >> > Thank you! >> > >> > -- >> > View this message in context: http://www.nabble.com/Can-not-% >> > 27assigns%27-value-in-View-test-tf4428018.html#a12631788 >> > Sent from the rspec-users mailing list archive at Nabble.com. >> > >> > _______________________________________________ >> > 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 > >-- View this message in context: http://www.nabble.com/Can-not-%27assigns%27-value-in-View-test-tf4428018.html#a12646459 Sent from the rspec-users mailing list archive at Nabble.com.
David Chelimsky
2007-Sep-13 00:13 UTC
[rspec-users] Can not ''assigns'' value in View test
On 9/12/07, Shaker <flyeminent at hotmail.com> wrote:> > Unfortunately, I am not supposed to change the code inside the partial. > That''s why I posted this message. I am trying to find a way of tackling this > problem. Because I am going to test tens of hundreds of partials, most of > which are using the symbols rather than instance variable.Huh? Symbols in the partials that are supposed to magically transform to some value? I don''t get it. What am I missing?> > David Chelimsky-2 wrote: > > > > On 9/12/07, Evan David Light <evan at tiggerpalace.com> wrote: > >> Granted that I''m new too; however, assigns[:hash] creates a > >> member > >> variable @hash that is made available to the view. Maybe that''s the > >> problem? Modify your view to use @hash instead. > > > > http://rspec.rubyforge.org/documentation/rails/writing/views.html > > > >> > >> On Sep 12, 2007, at 5:20 AM, Shaker wrote: > >> > >> > > >> > Hello everyone: > >> > I am quit new to View test using rspec. I want to write spec for a > >> > partial, which is rendered by a controller. However, the controller > >> > does not > >> > pass data to the partial using instance variables, it uses symbol > >> > variable > >> > instead. I read the example of view spec provided in the website. > >> > But the > >> > example is using instance variable. So I am looking for a way of > >> > assigning > >> > my test data to the partial to be tested. I would like to show an > >> > my code > >> > below: > >> > class MyController > >> > def index > >> > hash = {...#data provided here} > >> > render :partial=>''index'', :layout=>false, :locals=>{:hash=>hash} > >> > end > >> > end > >> > > >> > _index.rhtml > >> > ......#unrelated code omitted > >> > <script> > >> > var data = <%= hash %>; > >> > <!-- process data here --> > >> > </script> > >> > > >> > In my spec, I used assigns[:hash] = my_own_data, but an error > >> > occurred, > >> > saying that "undefined local variable or method ''hash'' ". > >> > How can I assign my own data to hash in my view spec? > >> > Thank you! > >> > > >> > -- > >> > View this message in context: http://www.nabble.com/Can-not-% > >> > 27assigns%27-value-in-View-test-tf4428018.html#a12631788 > >> > Sent from the rspec-users mailing list archive at Nabble.com. > >> > > >> > _______________________________________________ > >> > 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 > > > > > > -- > View this message in context: http://www.nabble.com/Can-not-%27assigns%27-value-in-View-test-tf4428018.html#a12646459 > Sent from the rspec-users mailing list archive at Nabble.com. > > _______________________________________________ > rspec-users mailing list > rspec-users at rubyforge.org > http://rubyforge.org/mailman/listinfo/rspec-users >
I also feel puzzled. But that''s what my colleagues do, and it works.
The
thing is they use
render :partial=>''index'', :locals=>{:hash=>hash}
in the controller to pass the hash data to the partial it will render(index
in this case). And later they simply use <%= hash %> to get the hash data
passed from the controller. Maybe the :locals does some magical work here. I
am quite familiar with rspec and ruby. So I am reading more documentation
now.
Hopefully we could figure it out shortly.
David Chelimsky-2 wrote:>
> On 9/12/07, Shaker <flyeminent at hotmail.com> wrote:
>>
>> Unfortunately, I am not supposed to change the code inside the partial.
>> That''s why I posted this message. I am trying to find a way of
tackling
>> this
>> problem. Because I am going to test tens of hundreds of partials, most
of
>> which are using the symbols rather than instance variable.
>
> Huh? Symbols in the partials that are supposed to magically transform
> to some value? I don''t get it. What am I missing?
>
>>
>> David Chelimsky-2 wrote:
>> >
>> > On 9/12/07, Evan David Light <evan at tiggerpalace.com>
wrote:
>> >> Granted that I''m new too; however,
assigns[:hash] creates a
>> >> member
>> >> variable @hash that is made available to the view. Maybe
that''s the
>> >> problem? Modify your view to use @hash instead.
>> >
>> > http://rspec.rubyforge.org/documentation/rails/writing/views.html
>> >
>> >>
>> >> On Sep 12, 2007, at 5:20 AM, Shaker wrote:
>> >>
>> >> >
>> >> > Hello everyone:
>> >> > I am quit new to View test using rspec. I want to write
spec for a
>> >> > partial, which is rendered by a controller. However, the
controller
>> >> > does not
>> >> > pass data to the partial using instance variables, it
uses symbol
>> >> > variable
>> >> > instead. I read the example of view spec provided in the
website.
>> >> > But the
>> >> > example is using instance variable. So I am looking for a
way of
>> >> > assigning
>> >> > my test data to the partial to be tested. I would like to
show an
>> >> > my code
>> >> > below:
>> >> > class MyController
>> >> > def index
>> >> > hash = {...#data provided here}
>> >> > render :partial=>''index'',
:layout=>false, :locals=>{:hash=>hash}
>> >> > end
>> >> > end
>> >> >
>> >> > _index.rhtml
>> >> > ......#unrelated code omitted
>> >> > <script>
>> >> > var data = <%= hash %>;
>> >> > <!-- process data here -->
>> >> > </script>
>> >> >
>> >> > In my spec, I used assigns[:hash] = my_own_data, but an
error
>> >> > occurred,
>> >> > saying that "undefined local variable or method
''hash'' ".
>> >> > How can I assign my own data to hash in my view spec?
>> >> > Thank you!
>> >> >
>> >> > --
>> >> > View this message in context:
http://www.nabble.com/Can-not-%
>> >> > 27assigns%27-value-in-View-test-tf4428018.html#a12631788
>> >> > Sent from the rspec-users mailing list archive at
Nabble.com.
>> >> >
>> >> > _______________________________________________
>> >> > 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
>> >
>> >
>>
>> --
>> View this message in context:
>>
http://www.nabble.com/Can-not-%27assigns%27-value-in-View-test-tf4428018.html#a12646459
>> Sent from the rspec-users mailing list archive at Nabble.com.
>>
>> _______________________________________________
>> 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
>
>
--
View this message in context:
http://www.nabble.com/Can-not-%27assigns%27-value-in-View-test-tf4428018.html#a12646774
Sent from the rspec-users mailing list archive at Nabble.com.
David Chelimsky
2007-Sep-13 00:53 UTC
[rspec-users] Can not ''assigns'' value in View test
On 9/12/07, Shaker <flyeminent at hotmail.com> wrote:> > I also feel puzzled. But that''s what my colleagues do, and it works. The > thing is they use > render :partial=>''index'', :locals=>{:hash=>hash} > in the controller to pass the hash data to the partial it will render(index > in this case). And later they simply use <%= hash %> to get the hash data > passed from the controller.Now THAT is a horse of a different color. OK - first: render :partial=>''index'', :locals=>{:hash=>hash} Here, the symbol :hash is just a key - it is not the object that''s been passed around. Second: <%= hash %> I''m assuming that''s in the partial named index (a partial named index???????, now THAT''s not at all confusing). In this case, the :locals => {:hash=>hash} in the calling template assigns the hash object (in the calling template''s scope) as the return value of a method in the partial named .... (drum roll, please) .... hash. Like hash(). So - what you want to do is to stub the hash method on the template: template.stub!(:hash).and_return(the_hash_I_want_to_stick_in_the_template) That all make sense? Good luck!> Maybe the :locals does some magical work here. I > am quite familiar with rspec and ruby. So I am reading more documentation > now. > Hopefully we could figure it out shortly. > > David Chelimsky-2 wrote: > > > > On 9/12/07, Shaker <flyeminent at hotmail.com> wrote: > >> > >> Unfortunately, I am not supposed to change the code inside the partial. > >> That''s why I posted this message. I am trying to find a way of tackling > >> this > >> problem. Because I am going to test tens of hundreds of partials, most of > >> which are using the symbols rather than instance variable. > > > > Huh? Symbols in the partials that are supposed to magically transform > > to some value? I don''t get it. What am I missing? > > > >> > >> David Chelimsky-2 wrote: > >> > > >> > On 9/12/07, Evan David Light <evan at tiggerpalace.com> wrote: > >> >> Granted that I''m new too; however, assigns[:hash] creates a > >> >> member > >> >> variable @hash that is made available to the view. Maybe that''s the > >> >> problem? Modify your view to use @hash instead. > >> > > >> > http://rspec.rubyforge.org/documentation/rails/writing/views.html > >> > > >> >> > >> >> On Sep 12, 2007, at 5:20 AM, Shaker wrote: > >> >> > >> >> > > >> >> > Hello everyone: > >> >> > I am quit new to View test using rspec. I want to write spec for a > >> >> > partial, which is rendered by a controller. However, the controller > >> >> > does not > >> >> > pass data to the partial using instance variables, it uses symbol > >> >> > variable > >> >> > instead. I read the example of view spec provided in the website. > >> >> > But the > >> >> > example is using instance variable. So I am looking for a way of > >> >> > assigning > >> >> > my test data to the partial to be tested. I would like to show an > >> >> > my code > >> >> > below: > >> >> > class MyController > >> >> > def index > >> >> > hash = {...#data provided here} > >> >> > render :partial=>''index'', :layout=>false, :locals=>{:hash=>hash} > >> >> > end > >> >> > end > >> >> > > >> >> > _index.rhtml > >> >> > ......#unrelated code omitted > >> >> > <script> > >> >> > var data = <%= hash %>; > >> >> > <!-- process data here --> > >> >> > </script> > >> >> > > >> >> > In my spec, I used assigns[:hash] = my_own_data, but an error > >> >> > occurred, > >> >> > saying that "undefined local variable or method ''hash'' ". > >> >> > How can I assign my own data to hash in my view spec? > >> >> > Thank you! > >> >> > > >> >> > -- > >> >> > View this message in context: http://www.nabble.com/Can-not-% > >> >> > 27assigns%27-value-in-View-test-tf4428018.html#a12631788 > >> >> > Sent from the rspec-users mailing list archive at Nabble.com. > >> >> > > >> >> > _______________________________________________ > >> >> > 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 > >> > > >> > > >> > >> -- > >> View this message in context: > >> http://www.nabble.com/Can-not-%27assigns%27-value-in-View-test-tf4428018.html#a12646459 > >> Sent from the rspec-users mailing list archive at Nabble.com. > >> > >> _______________________________________________ > >> 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 > > > > > > -- > View this message in context: http://www.nabble.com/Can-not-%27assigns%27-value-in-View-test-tf4428018.html#a12646774 > Sent from the rspec-users mailing list archive at Nabble.com. > > _______________________________________________ > rspec-users mailing list > rspec-users at rubyforge.org > http://rubyforge.org/mailman/listinfo/rspec-users >
Hello, David: Thank you very much for your help. Now it works! I would like to recall a message posted several days ago regarding the "paginate". How to test "paginate" in controller spec? One simple example may be like this: hash[:accounts_pages], hash[:accounts] = paginate :accounts(the table), #order and conditions follows How should I test this code in controller spec? Or can I mock this line, like should_receive(:paginate).and_return(...)? But the problem is ''paginate'' returns two values. :( Thanks for investigating this question. David Chelimsky-2 wrote:> > On 9/12/07, Shaker <flyeminent at hotmail.com> wrote: >> >> I also feel puzzled. But that''s what my colleagues do, and it works. The >> thing is they use >> render :partial=>''index'', :locals=>{:hash=>hash} >> in the controller to pass the hash data to the partial it will >> render(index >> in this case). And later they simply use <%= hash %> to get the hash data >> passed from the controller. > > Now THAT is a horse of a different color. OK - first: > > render :partial=>''index'', :locals=>{:hash=>hash} > > Here, the symbol :hash is just a key - it is not the object that''s > been passed around. > > Second: > > <%= hash %> > > I''m assuming that''s in the partial named index (a partial named > index???????, now THAT''s not at all confusing). In this case, the > :locals => {:hash=>hash} in the calling template assigns the hash > object (in the calling template''s scope) as the return value of a > method in the partial named .... (drum roll, please) .... hash. Like > hash(). > > So - what you want to do is to stub the hash method on the template: > > > template.stub!(:hash).and_return(the_hash_I_want_to_stick_in_the_template) > > That all make sense? > > Good luck! > >> Maybe the :locals does some magical work here. I >> am quite familiar with rspec and ruby. So I am reading more documentation >> now. >> Hopefully we could figure it out shortly. >> >> David Chelimsky-2 wrote: >> > >> > On 9/12/07, Shaker <flyeminent at hotmail.com> wrote: >> >> >> >> Unfortunately, I am not supposed to change the code inside the >> partial. >> >> That''s why I posted this message. I am trying to find a way of >> tackling >> >> this >> >> problem. Because I am going to test tens of hundreds of partials, most >> of >> >> which are using the symbols rather than instance variable. >> > >> > Huh? Symbols in the partials that are supposed to magically transform >> > to some value? I don''t get it. What am I missing? >> > >> >> >> >> David Chelimsky-2 wrote: >> >> > >> >> > On 9/12/07, Evan David Light <evan at tiggerpalace.com> wrote: >> >> >> Granted that I''m new too; however, assigns[:hash] creates a >> >> >> member >> >> >> variable @hash that is made available to the view. Maybe that''s >> the >> >> >> problem? Modify your view to use @hash instead. >> >> > >> >> > http://rspec.rubyforge.org/documentation/rails/writing/views.html >> >> > >> >> >> >> >> >> On Sep 12, 2007, at 5:20 AM, Shaker wrote: >> >> >> >> >> >> > >> >> >> > Hello everyone: >> >> >> > I am quit new to View test using rspec. I want to write spec >> for a >> >> >> > partial, which is rendered by a controller. However, the >> controller >> >> >> > does not >> >> >> > pass data to the partial using instance variables, it uses symbol >> >> >> > variable >> >> >> > instead. I read the example of view spec provided in the website. >> >> >> > But the >> >> >> > example is using instance variable. So I am looking for a way of >> >> >> > assigning >> >> >> > my test data to the partial to be tested. I would like to show an >> >> >> > my code >> >> >> > below: >> >> >> > class MyController >> >> >> > def index >> >> >> > hash = {...#data provided here} >> >> >> > render :partial=>''index'', :layout=>false, >> :locals=>{:hash=>hash} >> >> >> > end >> >> >> > end >> >> >> > >> >> >> > _index.rhtml >> >> >> > ......#unrelated code omitted >> >> >> > <script> >> >> >> > var data = <%= hash %>; >> >> >> > <!-- process data here --> >> >> >> > </script> >> >> >> > >> >> >> > In my spec, I used assigns[:hash] = my_own_data, but an error >> >> >> > occurred, >> >> >> > saying that "undefined local variable or method ''hash'' ". >> >> >> > How can I assign my own data to hash in my view spec? >> >> >> > Thank you! >> >> >> > >> >> >> > -- >> >> >> > View this message in context: http://www.nabble.com/Can-not-% >> >> >> > 27assigns%27-value-in-View-test-tf4428018.html#a12631788 >> >> >> > Sent from the rspec-users mailing list archive at Nabble.com. >> >> >> > >> >> >> > _______________________________________________ >> >> >> > 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 >> >> > >> >> > >> >> >> >> -- >> >> View this message in context: >> >> >> http://www.nabble.com/Can-not-%27assigns%27-value-in-View-test-tf4428018.html#a12646459 >> >> Sent from the rspec-users mailing list archive at Nabble.com. >> >> >> >> _______________________________________________ >> >> 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 >> > >> > >> >> -- >> View this message in context: >> http://www.nabble.com/Can-not-%27assigns%27-value-in-View-test-tf4428018.html#a12646774 >> Sent from the rspec-users mailing list archive at Nabble.com. >> >> _______________________________________________ >> 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 > >-- View this message in context: http://www.nabble.com/Can-not-%27assigns%27-value-in-View-test-tf4428018.html#a12646978 Sent from the rspec-users mailing list archive at Nabble.com.
David Chelimsky
2007-Sep-13 01:14 UTC
[rspec-users] Can not ''assigns'' value in View test
On 9/12/07, Shaker <flyeminent at hotmail.com> wrote:> > Hello, David: > Thank you very much for your help. Now it works! > I would like to recall a message posted several days ago regarding the > "paginate". How to test "paginate" in controller spec? One simple example > may be like this: > hash[:accounts_pages], hash[:accounts] = paginate :accounts(the table), > #order and conditions follows > How should I test this code in controller spec? Or can I mock this line, > like should_receive(:paginate).and_return(...)? But the problem is > ''paginate'' returns two values. :(When a method returns 2 values it is really returning an array, so ... and_return([val1, val2]) See if that works.> Thanks for investigating this question. > > David Chelimsky-2 wrote: > > > > On 9/12/07, Shaker <flyeminent at hotmail.com> wrote: > >> > >> I also feel puzzled. But that''s what my colleagues do, and it works. The > >> thing is they use > >> render :partial=>''index'', :locals=>{:hash=>hash} > >> in the controller to pass the hash data to the partial it will > >> render(index > >> in this case). And later they simply use <%= hash %> to get the hash data > >> passed from the controller. > > > > Now THAT is a horse of a different color. OK - first: > > > > render :partial=>''index'', :locals=>{:hash=>hash} > > > > Here, the symbol :hash is just a key - it is not the object that''s > > been passed around. > > > > Second: > > > > <%= hash %> > > > > I''m assuming that''s in the partial named index (a partial named > > index???????, now THAT''s not at all confusing). In this case, the > > :locals => {:hash=>hash} in the calling template assigns the hash > > object (in the calling template''s scope) as the return value of a > > method in the partial named .... (drum roll, please) .... hash. Like > > hash(). > > > > So - what you want to do is to stub the hash method on the template: > > > > > > template.stub!(:hash).and_return(the_hash_I_want_to_stick_in_the_template) > > > > That all make sense? > > > > Good luck! > > > >> Maybe the :locals does some magical work here. I > >> am quite familiar with rspec and ruby. So I am reading more documentation > >> now. > >> Hopefully we could figure it out shortly. > >> > >> David Chelimsky-2 wrote: > >> > > >> > On 9/12/07, Shaker <flyeminent at hotmail.com> wrote: > >> >> > >> >> Unfortunately, I am not supposed to change the code inside the > >> partial. > >> >> That''s why I posted this message. I am trying to find a way of > >> tackling > >> >> this > >> >> problem. Because I am going to test tens of hundreds of partials, most > >> of > >> >> which are using the symbols rather than instance variable. > >> > > >> > Huh? Symbols in the partials that are supposed to magically transform > >> > to some value? I don''t get it. What am I missing? > >> > > >> >> > >> >> David Chelimsky-2 wrote: > >> >> > > >> >> > On 9/12/07, Evan David Light <evan at tiggerpalace.com> wrote: > >> >> >> Granted that I''m new too; however, assigns[:hash] creates a > >> >> >> member > >> >> >> variable @hash that is made available to the view. Maybe that''s > >> the > >> >> >> problem? Modify your view to use @hash instead. > >> >> > > >> >> > http://rspec.rubyforge.org/documentation/rails/writing/views.html > >> >> > > >> >> >> > >> >> >> On Sep 12, 2007, at 5:20 AM, Shaker wrote: > >> >> >> > >> >> >> > > >> >> >> > Hello everyone: > >> >> >> > I am quit new to View test using rspec. I want to write spec > >> for a > >> >> >> > partial, which is rendered by a controller. However, the > >> controller > >> >> >> > does not > >> >> >> > pass data to the partial using instance variables, it uses symbol > >> >> >> > variable > >> >> >> > instead. I read the example of view spec provided in the website. > >> >> >> > But the > >> >> >> > example is using instance variable. So I am looking for a way of > >> >> >> > assigning > >> >> >> > my test data to the partial to be tested. I would like to show an > >> >> >> > my code > >> >> >> > below: > >> >> >> > class MyController > >> >> >> > def index > >> >> >> > hash = {...#data provided here} > >> >> >> > render :partial=>''index'', :layout=>false, > >> :locals=>{:hash=>hash} > >> >> >> > end > >> >> >> > end > >> >> >> > > >> >> >> > _index.rhtml > >> >> >> > ......#unrelated code omitted > >> >> >> > <script> > >> >> >> > var data = <%= hash %>; > >> >> >> > <!-- process data here --> > >> >> >> > </script> > >> >> >> > > >> >> >> > In my spec, I used assigns[:hash] = my_own_data, but an error > >> >> >> > occurred, > >> >> >> > saying that "undefined local variable or method ''hash'' ". > >> >> >> > How can I assign my own data to hash in my view spec? > >> >> >> > Thank you! > >> >> >> > > >> >> >> > -- > >> >> >> > View this message in context: http://www.nabble.com/Can-not-% > >> >> >> > 27assigns%27-value-in-View-test-tf4428018.html#a12631788 > >> >> >> > Sent from the rspec-users mailing list archive at Nabble.com. > >> >> >> > > >> >> >> > _______________________________________________ > >> >> >> > 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 > >> >> > > >> >> > > >> >> > >> >> -- > >> >> View this message in context: > >> >> > >> http://www.nabble.com/Can-not-%27assigns%27-value-in-View-test-tf4428018.html#a12646459 > >> >> Sent from the rspec-users mailing list archive at Nabble.com. > >> >> > >> >> _______________________________________________ > >> >> 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 > >> > > >> > > >> > >> -- > >> View this message in context: > >> http://www.nabble.com/Can-not-%27assigns%27-value-in-View-test-tf4428018.html#a12646774 > >> Sent from the rspec-users mailing list archive at Nabble.com. > >> > >> _______________________________________________ > >> 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 > > > > > > -- > View this message in context: http://www.nabble.com/Can-not-%27assigns%27-value-in-View-test-tf4428018.html#a12646978 > Sent from the rspec-users mailing list archive at Nabble.com. > > _______________________________________________ > rspec-users mailing list > rspec-users at rubyforge.org > http://rubyforge.org/mailman/listinfo/rspec-users >