Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
The test case now mimicks the template environment more closely, so it's possible to use render, load helper dependencies. This also fixes assert_select, and similar assertions. Because view tests and helpers generally don't render full templates assert_select looks first in rendered and then in output_buffer to find the rendered output.
- Loading branch information
Showing
6 changed files
with
278 additions
and
40 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
<%= render_from_helper %> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,8 +1,171 @@ | ||
require 'abstract_unit' | ||
|
||
class TestCaseTest < ActionView::TestCase | ||
def test_should_have_current_url | ||
controller = TestController.new | ||
assert_nothing_raised(NoMethodError){ controller.url_for({:controller => "foo", :action => "index"}) } | ||
module ActionView | ||
class TestCase | ||
module ATestHelper | ||
end | ||
|
||
module AnotherTestHelper | ||
def from_another_helper | ||
'Howdy!' | ||
end | ||
end | ||
|
||
module ASharedTestHelper | ||
def from_shared_helper | ||
'Holla!' | ||
end | ||
end | ||
helper ASharedTestHelper | ||
|
||
module SharedTests | ||
def self.included(test_case) | ||
test_case.class_eval do | ||
test "helpers defined on ActionView::TestCase are available" do | ||
assert test_case.ancestors.include?(ASharedTestHelper) | ||
assert 'Holla!', from_shared_helper | ||
end | ||
end | ||
end | ||
end | ||
|
||
class GeneralViewTest < ActionView::TestCase | ||
include SharedTests | ||
test_case = self | ||
|
||
test "works without testing a helper module" do | ||
assert_equal 'Eloy', render('developers/developer', :developer => stub(:name => 'Eloy')) | ||
end | ||
|
||
helper AnotherTestHelper | ||
test "additional helper classes can be specified as in a controller" do | ||
assert test_case.ancestors.include?(AnotherTestHelper) | ||
assert 'Howdy!', from_another_helper | ||
end | ||
end | ||
|
||
class ClassMethodsTest < ActionView::TestCase | ||
include SharedTests | ||
test_case = self | ||
|
||
tests ATestHelper | ||
test "tests the specified helper module" do | ||
assert_equal ATestHelper, test_case.helper_class | ||
assert test_case.ancestors.include?(ATestHelper) | ||
end | ||
|
||
helper AnotherTestHelper | ||
test "additional helper classes can be specified as in a controller" do | ||
assert test_case.ancestors.include?(AnotherTestHelper) | ||
assert 'Howdy!', from_another_helper | ||
|
||
test_case.helper_class.module_eval do | ||
def render_from_helper | ||
from_another_helper | ||
end | ||
end | ||
assert 'Howdy!', render(:partial => 'test/from_helper') | ||
end | ||
end | ||
|
||
class ATestHelperTest < ActionView::TestCase | ||
include SharedTests | ||
test_case = self | ||
|
||
test "inflects the name of the helper module to test from the test case class" do | ||
assert_equal ATestHelper, test_case.helper_class | ||
assert test_case.ancestors.include?(ATestHelper) | ||
end | ||
|
||
test "a configured test controller is available" do | ||
assert_kind_of ActionController::Base, controller | ||
assert_equal '', controller.controller_path | ||
end | ||
|
||
test "helper class that is being tested is always included in view instance" do | ||
self.class.helper_class.module_eval do | ||
def render_from_helper | ||
render :partial => 'customer', :collection => @customers | ||
end | ||
end | ||
|
||
TestController.stubs(:controller_path).returns('test') | ||
|
||
@customers = [stub(:name => 'Eloy'), stub(:name => 'Manfred')] | ||
assert_match /Hello: EloyHello: Manfred/, render(:partial => 'test/from_helper') | ||
end | ||
|
||
test "no additional helpers should shared across test cases" do | ||
assert !test_case.ancestors.include?(AnotherTestHelper) | ||
assert_raise(NoMethodError) { send :from_another_helper } | ||
end | ||
|
||
test "is able to use routes" do | ||
controller.request.assign_parameters('foo', 'index') | ||
assert_equal '/foo', url_for | ||
assert_equal '/bar', url_for(:controller => 'bar') | ||
end | ||
|
||
test "is able to use named routes" do | ||
with_routing do |set| | ||
set.draw { |map| map.resources :contents } | ||
assert_equal 'http://test.host/contents/new', new_content_url | ||
assert_equal 'http://test.host/contents/1', content_url(:id => 1) | ||
end | ||
end | ||
|
||
test "named routes can be used from helper included in view" do | ||
with_routing do |set| | ||
set.draw { |map| map.resources :contents } | ||
master_helper_module.module_eval do | ||
def render_from_helper | ||
new_content_url | ||
end | ||
end | ||
|
||
assert_equal 'http://test.host/contents/new', render(:partial => 'test/from_helper') | ||
end | ||
end | ||
|
||
test "is able to render partials with local variables" do | ||
assert_equal 'Eloy', render('developers/developer', :developer => stub(:name => 'Eloy')) | ||
assert_equal 'Eloy', render(:partial => 'developers/developer', | ||
:locals => { :developer => stub(:name => 'Eloy') }) | ||
end | ||
|
||
test "is able to render partials from templates and also use instance variables" do | ||
TestController.stubs(:controller_path).returns('test') | ||
|
||
@customers = [stub(:name => 'Eloy'), stub(:name => 'Manfred')] | ||
assert_match /Hello: EloyHello: Manfred/, render(:file => 'test/list') | ||
end | ||
|
||
test "is able to make methods available to the view" do | ||
master_helper_module.module_eval do | ||
def render_from_helper; from_test_case end | ||
end | ||
assert_equal 'Word!', render(:partial => 'test/from_helper') | ||
end | ||
|
||
def from_test_case; 'Word!'; end | ||
helper_method :from_test_case | ||
end | ||
|
||
class AssertionsTest < ActionView::TestCase | ||
def render_from_helper | ||
form_tag('/foo') do | ||
concat render(:text => '<ul><li>foo</li></ul>') | ||
end | ||
end | ||
helper_method :render_from_helper | ||
|
||
test "uses the output_buffer for assert_select" do | ||
render(:partial => 'test/from_helper') | ||
|
||
assert_select 'form' do | ||
assert_select 'li', :text => 'foo' | ||
end | ||
end | ||
end | ||
end | ||
end | ||
end |