I’m using the theme support plugin on one of my apps, and I would like
to spec the views for each of my themes, but having a little trouble
and hoping someone can point me in the right direction.
Themed views are located at /themes/my_theme/views that override the
views in app/views when that theme is active. I created a themes/
my_theme/spec directory, and to spec the file at /themes/my_theme/
views/default/index.html.erb I created the following file at themes/
my_theme/spec/default/index.html.erb_spec.rb
describe “/default/index.html.erb” do
include DefaultHelper
it “should render” do
render
end
end
Two major questions here:
I’m not sure what to put for the describe parameter since I’m
assuming “/default/index.html.erb” is referencing the app/views
directory
Running this spec gives:
NameError in ‘/default/index.html.erb should render’
undefined local variable or method `render’ for
#ActiveSupport::TestCase::Subclass_1:0x351dc24
themes/my_theme/spec/default/index.html.erb_spec.rb:11:
I’m not sure what to put for the describe parameter since I’m
assuming “/default/index.html.erb” is referencing the app/views
directory
This is a textual description used to help you. It doesn’t actually
mean anything to rspec at this time AFAIK. RSpec is able to to treat
specs found in “spec/views/” as ViewExampleGroups based on the “view”
directory naming convention, IIRC.
Running this spec gives:
NameError in ‘/default/index.html.erb should render’
undefined local variable or method `render’ for
#ActiveSupport::TestCase::Subclass_1:0x351dc24
themes/my_theme/spec/default/index.html.erb_spec.rb:11:
any suggestions on how to approach this?
Try passing in :type => “view” to your describe. e.g.:
it “should render” do
template.view_paths=(File.join(File.dirname(FILE),
“/…/…/…/themes/my_theme/”))
render
end
And why isn’t that DRY with the matching /…/…/…/themes code on the
production side?
Because nobody has asked for support for views outside the standard
directories, and you haven’t submitted a patch!
I’d probably (mumble) get the architecture wrong…
BTW “DRY” does not strictly apply across the test/code boundary,
otherwise all
the test and code in the world would disappear with a “thoomp” into a
singularity.
describe “/default/index.html.erb”, :type => :view do
include DefaultHelper
it “should render” do
template.view_paths=(File.join(File.dirname(FILE),
“/…/…/…/themes/my_theme/”))
render
end
And why isn’t that DRY with the matching /…/…/…/themes code on the
production
side?
BTW, as a meta-answer, I implemented this algorithm for a test once…
for each theme in themes/*
render the theme
assert the theme passes Tidy validation
assert all the a hrefs point somewhere
assert every image appears in public/images
Hours of fun! If you have two many themes, you can pick a random
assortment for
each integration test run…
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.