[rspec-users] undefined local variable or method `assigns'

David Chelimsky dchelimsky at gmail.com
Sun Jun 13 09:29:15 EDT 2010

On Jun 13, 2010, at 6:49 AM, Kristian Mandrup wrote:

> assigns(:message).should eq(@message)
> assign(:message, stub("Message", :text => "Hello world!"))
> Hmm, so 'assign' to assign a variable and 'assigns' to read an
> assigned variable?
> We need to update the RSpec 2 wiki or somewhere with all these API
> changes so it is clear to everyone.

There's already info about assign(key, val) on the rspec-rails readme: http://github.com/rspec/rspec-rails. I'll add something about assigns(:key) as well.

Keep in mind that assign(k,v) is used in view specs to provide data to the view, whereas assigns(key) is used in controller specs to express expectations about what the controller does.

As for the wiki, let's hold off on that for now. There is currently insufficient  documentation in too many places, and the wiki has, at times, caused more confusion than benefit. I've got a few thoughts rolling around about how to best address this, and I'll follow up on that in a separate thread in the next couple of days.


> On Jun 11, 9:08 am, David Chelimsky <dchelim... at gmail.com> wrote:
>> On Thu, Jun 10, 2010 at 4:41 PM, <jfran... at gmail.com> wrote:
>>> I might be missing something basic here, but I'm stumped on this
>>> error:
>>> model code:
>>> class CachedStat < ActiveRecord::Base
>>>    def self.create_stats_days_ago(days_ago, human_id)
>>>    d = Date.today - days_ago.day
>>>    @prs = PageRequest.find(:all, :conditions => [ "owner_type =
>>> 'Human' and owner_id = ? and created_at = ?", human_id, d] )
>>>  end
>>> end
>>> spec code:
>>>  it "should create stats for the specified number of days in the
>>> past" do
>>>    CachedStat.create_stats_days_ago(1, Human.first.id)
>>>    assigns[:prs].should eql("foo")
>>>  end
>>> The error is: undefined local variable or method `assigns' for
>>> #<Spec::Rails::Example::ModelExampleGroup::Subclass_1:0x2fbac28>
>>> I feel like I'm overlooking something obvious but it's invisible to
>>> me. Any suggestions?
>> assigns is for controller and view specs, not model specs. What is it
>> you're trying to specify here?
>> _______________________________________________
>> rspec-users mailing list
>> rspec-us... at rubyforge.orghttp://rubyforge.org/mailman/listinfo/rspec-users
> _______________________________________________
> rspec-users mailing list
> rspec-users at rubyforge.org
> http://rubyforge.org/mailman/listinfo/rspec-users

More information about the rspec-users mailing list