Can not 'assigns' value in View test

View: New views
9 Messages — Rating Filter:   Alert me  

Can not 'assigns' value in View test

by Shaker :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

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!

Re: Can not 'assigns' value in View test

by Evan David Light :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

        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@...
> http://rubyforge.org/mailman/listinfo/rspec-users

_______________________________________________
rspec-users mailing list
rspec-users@...
http://rubyforge.org/mailman/listinfo/rspec-users

Re: Can not 'assigns' value in View test

by David Chelimsky-2 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

On 9/12/07, Evan David Light <evan@...> 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@...
> > http://rubyforge.org/mailman/listinfo/rspec-users
>
> _______________________________________________
> rspec-users mailing list
> rspec-users@...
> http://rubyforge.org/mailman/listinfo/rspec-users
>
_______________________________________________
rspec-users mailing list
rspec-users@...
http://rubyforge.org/mailman/listinfo/rspec-users

Re: Can not 'assigns' value in View test

by Shaker :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

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@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@rubyforge.org
> > http://rubyforge.org/mailman/listinfo/rspec-users
>
> _______________________________________________
> rspec-users mailing list
> rspec-users@rubyforge.org
> http://rubyforge.org/mailman/listinfo/rspec-users
>
_______________________________________________
rspec-users mailing list
rspec-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/rspec-users

Re: Can not 'assigns' value in View test

by David Chelimsky-2 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

On 9/12/07, Shaker <flyeminent@...> 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@...> 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@...
> >> > http://rubyforge.org/mailman/listinfo/rspec-users
> >>
> >> _______________________________________________
> >> rspec-users mailing list
> >> rspec-users@...
> >> http://rubyforge.org/mailman/listinfo/rspec-users
> >>
> > _______________________________________________
> > rspec-users mailing list
> > rspec-users@...
> > 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@...
> http://rubyforge.org/mailman/listinfo/rspec-users
>
_______________________________________________
rspec-users mailing list
rspec-users@...
http://rubyforge.org/mailman/listinfo/rspec-users

Re: Can not 'assigns' value in View test

by Shaker :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

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@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@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@rubyforge.org
> >> > http://rubyforge.org/mailman/listinfo/rspec-users
> >>
> >> _______________________________________________
> >> rspec-users mailing list
> >> rspec-users@rubyforge.org
> >> http://rubyforge.org/mailman/listinfo/rspec-users
> >>
> > _______________________________________________
> > rspec-users mailing list
> > rspec-users@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@rubyforge.org
> http://rubyforge.org/mailman/listinfo/rspec-users
>
_______________________________________________
rspec-users mailing list
rspec-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/rspec-users

Re: Can not 'assigns' value in View test

by David Chelimsky-2 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

On 9/12/07, Shaker <flyeminent@...> 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@...> 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@...> 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@...
> >> >> > http://rubyforge.org/mailman/listinfo/rspec-users
> >> >>
> >> >> _______________________________________________
> >> >> rspec-users mailing list
> >> >> rspec-users@...
> >> >> http://rubyforge.org/mailman/listinfo/rspec-users
> >> >>
> >> > _______________________________________________
> >> > rspec-users mailing list
> >> > rspec-users@...
> >> > 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@...
> >> http://rubyforge.org/mailman/listinfo/rspec-users
> >>
> > _______________________________________________
> > rspec-users mailing list
> > rspec-users@...
> > 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@...
> http://rubyforge.org/mailman/listinfo/rspec-users
>
_______________________________________________
rspec-users mailing list
rspec-users@...
http://rubyforge.org/mailman/listinfo/rspec-users

Re: Can not 'assigns' value in View test

by Shaker :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

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@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@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@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@rubyforge.org
> >> >> > http://rubyforge.org/mailman/listinfo/rspec-users
> >> >>
> >> >> _______________________________________________
> >> >> rspec-users mailing list
> >> >> rspec-users@rubyforge.org
> >> >> http://rubyforge.org/mailman/listinfo/rspec-users
> >> >>
> >> > _______________________________________________
> >> > rspec-users mailing list
> >> > rspec-users@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@rubyforge.org
> >> http://rubyforge.org/mailman/listinfo/rspec-users
> >>
> > _______________________________________________
> > rspec-users mailing list
> > rspec-users@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@rubyforge.org
> http://rubyforge.org/mailman/listinfo/rspec-users
>
_______________________________________________
rspec-users mailing list
rspec-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/rspec-users

Re: Can not 'assigns' value in View test

by David Chelimsky-2 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

On 9/12/07, Shaker <flyeminent@...> 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@...> 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@...> 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@...> 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@...
> >> >> >> > http://rubyforge.org/mailman/listinfo/rspec-users
> >> >> >>
> >> >> >> _______________________________________________
> >> >> >> rspec-users mailing list
> >> >> >> rspec-users@...
> >> >> >> http://rubyforge.org/mailman/listinfo/rspec-users
> >> >> >>
> >> >> > _______________________________________________
> >> >> > rspec-users mailing list
> >> >> > rspec-users@...
> >> >> > 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@...
> >> >> http://rubyforge.org/mailman/listinfo/rspec-users
> >> >>
> >> > _______________________________________________
> >> > rspec-users mailing list
> >> > rspec-users@...
> >> > 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@...
> >> http://rubyforge.org/mailman/listinfo/rspec-users
> >>
> > _______________________________________________
> > rspec-users mailing list
> > rspec-users@...
> > 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@...
> http://rubyforge.org/mailman/listinfo/rspec-users
>
_______________________________________________
rspec-users mailing list
rspec-users@...
http://rubyforge.org/mailman/listinfo/rspec-users