Graphical tests again
I’m spending the summer getting good enough at Rails to fit in at Rails Edge. To do that, I’m creating a website for my kids.
Recently, I plugged in Acts As Authenticated to do signup, login, authentication, and the like. Since I’m messing around with that plugin’s workflow, this seemed like a good opportunity to write workflow tests (which, in Rails, falls under the category of “integration tests”). Here’s my first test, which follows something like the “Even Higher-Level Tests” style in section 13.4 of Agile Web Development With Rails:
def test_normal_signup
dave = new_visitor
dave.starts_at ‘home page’
dave.goes_to ’sign up page’
(dave.is_at ’sign up page’)
dave.enters :login => ‘dave’, :email => ‘dave@example.com’,
:password => ‘dave332′, :confirm_password => ‘dave332′
(dave.is_sent_registration_email)
(dave.is_at ‘welcome page’)
# Dave goes away
dave_next_day = new_visitor
in_email {
dave_next_day.has_clicked_on_link_to ‘confirmation page’, dave.registration_code
(dave_next_day.is_at ‘members page’)
}
end
But even as I wrote it, I became discouraged. It’s English-like, yes, but it’s still not terribly skimmable. Answers to questions like “Where do you go after you signup?” don’t leap out at you. Is this really a format that’s going to help people either communicate or make sense of paths through a set of pages?
So I fell back on my ideas about graphical tests and drew the following. (Click the picture for a larger pdf.)
That took longer to draw than it did to write the first test, but actually not a whole lot longer. What do you think? Should I go to the trouble of reimplementing my OmniGraffle parser in Ruby and finish implementing the test? (The good thing about doing that is that it seems like Rails programmers all use Macs, so there’s actually a chance that a test framework I built would get used.)
June 14th, 2007 at 4:50 pm
I think reimplementing the OmniGraffle parser in Ruby would be time well spent. Will you make it openly available? The second version is much easier to follow.
June 15th, 2007 at 12:10 am
Did you see Ward’s Process Explorer from the Eclipse Foundation portal? It is sort of the opposite, creating a picture from tests, but it does a very good job of letting you see what the flow for a given action is going to be.
He’s got a bit write-up from it over here:
http://eclipse-projects.blogspot.com/search/label/portal
And you can play with it directly here:
https://dev.eclipse.org/portal/myfoundation/tests/index.php
(Not at all obvious but you press “swim” to see the diagram for a given test.)
June 17th, 2007 at 3:54 pm
I have seen Ward’s thing, thanks. There’ll be a workshop on business-facing tests after PNSQC in Portland. That’ll be a good chance to compare and contrast.
I think it’s interesting (if it’s true) that our two different audiences led to different implementations. If I understand correctly, a big part of Ward’s motivation was to use tests as a way of engaging and communicating with 18 gazillion potential Eclipse committers/volunteers who needed to see and understand an automated process. That given, writing the test in ActionFixture-ish PHP is fine.
What I’m trying to do, I think, is serve people who are using drawings to figure out what it is they want, to spark ideas, and to work through possibilities systematically. The first choice tool for that is a whiteboard (petter than pencil and paper because of its improved erasability). But OmniGraffle is not too much slower and more awkward, so it’s the right tool if the work can leave behind a document that needs only massaging to become an executable example/test (in contrast to the whiteboard, which requires rewriting).
June 17th, 2007 at 4:02 pm
Bob: yes, anything I do will be distributed as a freely-reusable gem.
July 2nd, 2007 at 2:05 pm
[…] when the code tells you something surprising. For example, I just added groups to my fledgling Graffle parser. Previously, the object at the end-point of a line had to be at the same nesting level as the line […]
July 8th, 2007 at 3:35 pm
[…] far as I know, there’s only one other person in the world who cares about testing Rails apps from OmniGraffle documents. (Hi, Tom!) Still, since I always make a fuss to clients about the need to frequently release […]
April 11th, 2011 at 6:48 am
[…] Graphical Tests – Brian Marick […]