P
Phlip
Rubies:
assert_xhtml now works with RSpec. (Call it ".should be_html_with{}" !)
This is its Rails functional test aspect:
get :edit_user, :id => usersMoses).id
scope = self
assert_xhtml do
form :action => '/users' do
fieldset do
legend 'Personal Information'
label 'First name'
input :type => 'text',
:name => 'user[first_name]'
:value => scope.usersMoses).first_name
end
end
end
The assertion tests your form "by example". Your page must contain a form with
the given action, and it must contain at least the listed elements, attributes,
and text. Anything you don't care about - anything your designers might change -
you simply leave out of the example.
(The example is actually Nokogiri::HTML::Builder notation, so anything Nokogiri
can do, the assertion can do. But that's why we needed that 'scope' variable, as
a kind of "messenger rope", to call your test-side methods inside the block.
Otherwise, Nokogiri would dutifully convert them into HTML!)
Here's a similar test, in RSpec:
it 'should have a cute form' do
render '/users/new'
response.body.should be_html_with{
form :action => '/users' do
fieldset do
legend 'Personal Information'
label 'First nome'
input :type => 'text', :name => 'user[first_name]'
end
end
}
end
Oh, except it has a bug in it! Here's the diagnostic:
'/users/new should have a cute form' FAILED
Could not find this reference...
<form action="/users">
<fieldset>
<legend>Personal Information</legend>
<label>First nome</label>
<input type="text" name="user[first_name]">
</fieldset></form>
....in these sample(s)...
<form action="/users">
<fieldset>
<legend>Personal Information</legend>
<ol>
<li id="control_user_first_name">
<label for="user_first_name">First name</label>
<input type="text" name="user[first_name]" id="user_first_name">
</li>
</ol>
</fieldset>
</form>
Notice, as usual, the specification diagnostic only contained the start of the
match. The example with <form action="/users"> worked.
That's all there is to it. Write anything you like inside the block, and if the
assertion can't find it, it will explain why it can't. Install the gem like this:
gem install nokogiri assert2 # make sure the later is 0.3.9!
Then use require 'assert2/xhtml', in either the test/unit or RSpec environments.
This project is wide-open for suggestions - with < 200 lines of code there's
plenty of room for more features!
assert_xhtml now works with RSpec. (Call it ".should be_html_with{}" !)
This is its Rails functional test aspect:
get :edit_user, :id => usersMoses).id
scope = self
assert_xhtml do
form :action => '/users' do
fieldset do
legend 'Personal Information'
label 'First name'
input :type => 'text',
:name => 'user[first_name]'
:value => scope.usersMoses).first_name
end
end
end
The assertion tests your form "by example". Your page must contain a form with
the given action, and it must contain at least the listed elements, attributes,
and text. Anything you don't care about - anything your designers might change -
you simply leave out of the example.
(The example is actually Nokogiri::HTML::Builder notation, so anything Nokogiri
can do, the assertion can do. But that's why we needed that 'scope' variable, as
a kind of "messenger rope", to call your test-side methods inside the block.
Otherwise, Nokogiri would dutifully convert them into HTML!)
Here's a similar test, in RSpec:
it 'should have a cute form' do
render '/users/new'
response.body.should be_html_with{
form :action => '/users' do
fieldset do
legend 'Personal Information'
label 'First nome'
input :type => 'text', :name => 'user[first_name]'
end
end
}
end
Oh, except it has a bug in it! Here's the diagnostic:
'/users/new should have a cute form' FAILED
Could not find this reference...
<form action="/users">
<fieldset>
<legend>Personal Information</legend>
<label>First nome</label>
<input type="text" name="user[first_name]">
</fieldset></form>
....in these sample(s)...
<form action="/users">
<fieldset>
<legend>Personal Information</legend>
<ol>
<li id="control_user_first_name">
<label for="user_first_name">First name</label>
<input type="text" name="user[first_name]" id="user_first_name">
</li>
</ol>
</fieldset>
</form>
Notice, as usual, the specification diagnostic only contained the start of the
match. The example with <form action="/users"> worked.
That's all there is to it. Write anything you like inside the block, and if the
assertion can't find it, it will explain why it can't. Install the gem like this:
gem install nokogiri assert2 # make sure the later is 0.3.9!
Then use require 'assert2/xhtml', in either the test/unit or RSpec environments.
This project is wide-open for suggestions - with < 200 lines of code there's
plenty of room for more features!