Forum: RSpec Using semantics in steps

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
85d99e7678d8720f6e00ab0f60fe6ea9?d=identicon&s=25 Andrew Premdas (Guest)
on 2008-12-19 07:38
(Received via mailing list)
Hi All,

Wanted to put this idea forward, see what you think of it. I'm using
Aslaks
lorry feature to illustrate this. See
http://github.com/aslakhellesoy/cucumber_rails/tre...
.

In particular

  within("table > tr:nth-child(#{pos.to_i+1})") do
    click_link "Destroy"

and

Then /^I should see the following lorries:$/ do |lorries|
  lorries.raw[1..-1].each_with_index do |row, i|
    row.each_with_index do |cell, j|
      response.should have_selector("table > tr:nth-child(#{i+2}) >
td:nth-child(#{j+1})") { |td|
        td.inner_text.should == cell
      }
    end
  end

Now imagine this is a real project, and your designer comes along and
decides that lorries really should be shown in a horizontal scrolling
zoomable javascript widgity thing. Now out go the tables and the
scenario
breaks.

However if we use something like

within("#lorries > .lorry:nth-child            # not tested this syntax,
hope the meaning is clear

then we have

1) Defined semantic tags that the designer should not touch
2) Not relied on any html elements that a designer might change
3) Created a step that works with the meaning of the UI not its
presentation

So what do you think?

Andrew
D069ac0170dc6c93bad77734258fadae?d=identicon&s=25 Peter Jaros (Guest)
on 2008-12-19 16:08
(Received via mailing list)
On Fri, Dec 19, 2008 at 1:09 AM, Andrew Premdas <apremdas@gmail.com>
wrote:

> then we have
>
> 1) Defined semantic tags that the designer should not touch
> 2) Not relied on any html elements that a designer might change
> 3) Created a step that works with the meaning of the UI not its presentation
>
> So what do you think?

100% agree.  The more semantic your test code is, the less likely it
is to break, and the more likely it ought to when it does.  If there's
no longer a #lorries element on the page, the step will fail, but
that's a lot like saying that if the lorries aren't on the page the
step will fail.  And that's a good thing.

Peter
F86901feca747abbb5c6c020362ef2e7?d=identicon&s=25 Zach Dennis (zdennis)
on 2008-12-19 17:34
(Received via mailing list)
On Fri, Dec 19, 2008 at 1:09 AM, Andrew Premdas <apremdas@gmail.com>
wrote:
> and
> Now imagine this is a real project, and your designer comes along and
>
> 1) Defined semantic tags that the designer should not touch
> 2) Not relied on any html elements that a designer might change
> 3) Created a step that works with the meaning of the UI not its presentation
>
> So what do you think?
>

I agree with your sentiments. It's how I access (and encourage others
to access) the views (both in step definitions and in view specs).

--
Zach Dennis
http://www.continuousthinking.com
http://www.mutuallyhuman.com
0be0e4aa42aacd9a8a95c792de273ca7?d=identicon&s=25 Aslak Hellesøy (aslakhellesoy)
on 2008-12-19 18:04
(Received via mailing list)
>> In particular
>>        td.inner_text.should == cell
>>
>>
>> So what do you think?
>>
>

Feel free to submit a patch.

Aslak
5d38ab152e1e3e219512a9859fcd93af?d=identicon&s=25 David Chelimsky (Guest)
on 2008-12-19 19:15
(Received via mailing list)
Is this a feature request or a style thing?
F86901feca747abbb5c6c020362ef2e7?d=identicon&s=25 Zach Dennis (zdennis)
on 2008-12-19 19:34
(Received via mailing list)
On Fri, Dec 19, 2008 at 1:13 PM, David Chelimsky <dchelimsky@gmail.com>
wrote:
> Is this a feature request or a style thing?

I believe strictly style. Webrat supports within already, ie:

within "#my-css-selector" do |scope|
  scope.should have_selector("child element")
end


>>>> lorry feature to illustrate this. See
>>>>  lorries.raw[1..-1].each_with_index do |row, i|
>>>> breaks.
>>>> 3) Created a step that works with the meaning of the UI not its
>>> I agree with your sentiments. It's how I access (and encourage others
>>
>> _______________________________________________
>> rspec-users mailing list
>> rspec-users@rubyforge.org
>> http://rubyforge.org/mailman/listinfo/rspec-users
>>
>



--
Zach Dennis
http://www.continuousthinking.com
http://www.mutuallyhuman.com
85d99e7678d8720f6e00ab0f60fe6ea9?d=identicon&s=25 Andrew Premdas (Guest)
on 2008-12-19 20:01
(Received via mailing list)
Was just using your code as an example, not being critical of it. Sorry
if
it came out that way :). In its context it makes its point very clearly.

Andrew

2008/12/19 Aslak Hellesøy <aslak.hellesoy@gmail.com>
85d99e7678d8720f6e00ab0f60fe6ea9?d=identicon&s=25 Andrew Premdas (Guest)
on 2008-12-19 20:17
(Received via mailing list)
A style thing, just exploring interactions between features and UI

2008/12/19 David Chelimsky <dchelimsky@gmail.com>
This topic is locked and can not be replied to.