Undefined method `assert_select'


#1

I’m having trouble getting the specs to run for a plugin where I want to
fix a bug. (I’ve actually already found and fixed the bug, but I don’t
want to submit a fix without a test!) When I started the specs weren’t
running, but it may be that I’m using Rails 2.3.3 and the plugin has
been tested on 2.1 and earlier. I went through writing a spec for a very
simple plugin to get some perspective on how things fit together, and
I’ve resolved some issues, but still see this error:

$ spec
vendor/plugins/openlaszlo_plugin/spec/swfobject_view_helper_spec.rb
FFFFFFF

NoMethodError in ‘ActionView::Helpers::SwfObjectHelper swfobject_tag
should call swfobject.embedSWF’
undefined method `assert_select’ for
#ActiveSupport::TestCase::Subclass_1::Subclass_1:0x2281278
./vendor/plugins/openlaszlo_plugin/spec/swfobject_view_helper_spec.rb:17:

line 17 is:
html.should have_tag(‘script’, /swfobject.embedSWF/)

Can anyone give me a hint?

Thanks,
Sarah


#2

Sarah A. wrote:

line 17 is:
html.should have_tag(‘script’, /swfobject.embedSWF/)

I order to use have_tag, it appears I have to include:

just enough infrastructure to get ‘assert_select’ to work

require ‘action_controller’
require ‘action_controller/assertions/selector_assertions’
include ActionController::Assertions::SelectorAssertions

borrowed from: http://intertwingly.net/stories/2009/05/06/checkdepot.rb

Odd, because it seems like this used to work without that in a previous
version of Rails, but I would need to investigate more to isolate what
went wrong. I figured I would go ahead and post this as something that
works.

Sarah


#3

On Sat, May 23, 2009 at 3:00 PM, Sarah A. removed_email_address@domain.invalid
wrote:

include ActionController::Assertions::SelectorAssertions

Confirmed that this is is required in Rails 2.3.2 and not in 2.1.0,
although I still don’t understand why.

Me neither :slight_smile:

What version of rspec are you using?


#4

Sarah A. wrote:

Sarah A. wrote:

line 17 is:
html.should have_tag(‘script’, /swfobject.embedSWF/)

I order to use have_tag, it appears I have to include:

just enough infrastructure to get ‘assert_select’ to work

require ‘action_controller’
require ‘action_controller/assertions/selector_assertions’
include ActionController::Assertions::SelectorAssertions

Confirmed that this is is required in Rails 2.3.2 and not in 2.1.0,
although I still don’t understand why.

Sarah


#5

David C. wrote:

What version of rspec are you using?

1.2.6


#6

Sarah A. wrote:

Sarah A. wrote:

line 17 is:
html.should have_tag(‘script’, /swfobject.embedSWF/)

I order to use have_tag, it appears I have to include:

just enough infrastructure to get ‘assert_select’ to work

require ‘action_controller’
require ‘action_controller/assertions/selector_assertions’
include ActionController::Assertions::SelectorAssertions

I just worked on this a bit with RailsBridge mentor, Zach M., who
figured out that the problem was that I had not specifies a type for my
view helper example group:

describe SwfObjectHelper, :type => :helper do

I thought I would post it here in case anyone else runs into the same
issue.

Sarah


#7

David C. wrote:

FYI - if you put this file in spec/helpers/swf_object_helper_spec.rb,
then :type => :helper is implied, so you don’t have to make it
explicit.

Nice.

By the way, I’ve been enjoying The RSpec Book, but it looks like I had
to figure out view helpers before that chapter was ready. Thank for
your help on this list!

Sarah


#8

David C. wrote:

FYI - if you put this file in spec/helpers/swf_object_helper_spec.rb,
then :type => :helper is implied, so you don’t have to make it
explicit.

just curious… are there any other magic directories I should know
about?

Thanks,
Sarah


#9

On Sun, May 24, 2009 at 3:20 PM, Sarah A. removed_email_address@domain.invalid
wrote:

include ActionController::Assertions::SelectorAssertions

I just worked on this a bit with RailsBridge mentor, Zach M., who
figured out that the problem was that I had not specifies a type for my
view helper example group:

describe SwfObjectHelper, :type => :helper do

FYI - if you put this file in spec/helpers/swf_object_helper_spec.rb,
then :type => :helper is implied, so you don’t have to make it
explicit.

Cheers,
David


#10

On Sun, May 24, 2009 at 7:38 PM, Sarah A. removed_email_address@domain.invalid
wrote:

David C. wrote:

FYI - if you put this file in spec/helpers/swf_object_helper_spec.rb,
then :type => :helper is implied, so you don’t have to make it
explicit.

just curious… are there any other magic directories I should know
about?

All directories under spec/ are potentially magic - rspec will always
look at spec/:directory/:filename and see if it has an example group
type registered for whatever directory is. So if there is a foo
example group type, it will be used for any spec file in spec/foos.

rspec-rails uses that feature of rspec to implicitly load custom
groups for models, views, controllers and helpers in spec/models,
spec/views, spec/controllers and spec/helpers.

Cheers,
David