Hi, Here is the short version of my question: For stories, is webrat the way to go? How many of you use webrat? How many don''t? Here is the long version: I have been writing specs for some time now. I have noticed that once I learned how to write specs (both the syntax and the techniques) it made my development much faster and more reliable. However, while I was learning my development was painfully slow. So far it seems to be the same with stories.>From the recent posts I''ve seen on this mailing list, it looks like Ishould focus my efforts on learning cucumber instead of the built-in story runner. It is mostly compatible with what is already in RSpec, and it has some good extra features. Do you generally agree with that? What I am confused about, is whether or not I should learn webrat. It looks great in theory, and I''ve see it mentioned a few times. But I haven''t seen a wide-spread move towards it. On top of that, the first time I looked at it I got rather confused. The reason I ask (instead of just trying it for myself) is that I''m the only developer on most of the projects I work on, so I can''t afford a huge drop in productivity. And if my efforts learning to write specs are much of a guideline, it will probably take me 3-4 weeks to get comfortable with writing stories. I know I need to learn this, so I want to focus my efforts where I will get the most return on my time. Thanks PS. I am REALLY looking forward to the RSpec book!
Here''s my take as just a happy user of stories... First, I say definitely use WebRat. WebRat is a large part of what convinced me to use stories in the first place. I was looking for both something that simulated real usage, as well as something that wasn''t so fragile/affected by changes in implementation (for the latter, this is stories vs. view and controller specs). At this point, I have a large set of unit specs, helper specs, and large number of stories, and then very little controller and view specs. I am quite sold on this approach. I find writing the stories to be a much better way to test my views and controllers, because it''s testing them in the same way they''d truly be used by a user, as opposed to what at least feels like to me, an insider knowledge way of testing (ya ya, I know, test against the API and so on, but go look at most controller tests and such, they just don''t feel as parallel to reality). Anyway, all that wouldn''t really be possible without WebRat, IMHO. You can also pursue Selenium, but that was just too much for me at this point. We are getting into more JavaScript in our app, so I may bring Selenium in in the future, but we''ll see. As for Cucumber, this looks promising, but I haven''t personally tried it out yet. Here''s one writeup I saw on it: http://upstream-berlin.com/2008/08/26/cucumber-next-generation-rspec-story-runner/ I''ve already done all the rake tasks I need, and set it all up to work quite nicely with CruiseControl.rb, so some of the advantage is diminished. Plus, I haven''t been certain it''s ready for prime time use, or enough of an advantage to disturb a system that''s already working well, but others here can comment better on Cucumber... On Mon, Sep 8, 2008 at 9:42 PM, DyingToLearn <phylae at gmail.com> wrote:> Hi, > > Here is the short version of my question: > For stories, is webrat the way to go? How many of you use webrat? How > many don''t? > > Here is the long version: > I have been writing specs for some time now. I have noticed that once > I learned how to write specs (both the syntax and the techniques) it > made my development much faster and more reliable. However, while I > was learning my development was painfully slow. So far it seems to be > the same with stories. > > >From the recent posts I''ve seen on this mailing list, it looks like I > should focus my efforts on learning cucumber instead of the built-in > story runner. It is mostly compatible with what is already in RSpec, > and it has some good extra features. Do you generally agree with that? > > What I am confused about, is whether or not I should learn webrat. It > looks great in theory, and I''ve see it mentioned a few times. But I > haven''t seen a wide-spread move towards it. On top of that, the first > time I looked at it I got rather confused. > > The reason I ask (instead of just trying it for myself) is that I''m > the only developer on most of the projects I work on, so I can''t > afford a huge drop in productivity. And if my efforts learning to > write specs are much of a guideline, it will probably take me 3-4 > weeks to get comfortable with writing stories. > > I know I need to learn this, so I want to focus my efforts where I > will get the most return on my time. > > Thanks > > PS. I am REALLY looking forward to the RSpec book! > _______________________________________________ > rspec-users mailing list > rspec-users at rubyforge.org > http://rubyforge.org/mailman/listinfo/rspec-users >-- Christopher Bailey Cobalt Edge LLC http://cobaltedge.com -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://rubyforge.org/pipermail/rspec-users/attachments/20080917/ae9997b8/attachment.html>
On 9 Sep 2008, at 05:42, DyingToLearn wrote:> Hi, > > Here is the short version of my question: > For stories, is webrat the way to go? How many of you use webrat? How > many don''t? > > Here is the long version: > I have been writing specs for some time now. I have noticed that once > I learned how to write specs (both the syntax and the techniques) it > made my development much faster and more reliable. However, while I > was learning my development was painfully slow. So far it seems to be > the same with stories. > >> From the recent posts I''ve seen on this mailing list, it looks like I > should focus my efforts on learning cucumber instead of the built-in > story runner. It is mostly compatible with what is already in RSpec, > and it has some good extra features. Do you generally agree with that?+1> What I am confused about, is whether or not I should learn webrat. It > looks great in theory, and I''ve see it mentioned a few times. But I > haven''t seen a wide-spread move towards it. On top of that, the first > time I looked at it I got rather confused.Yeah it''s definitely the way to go to give you a nice abstraction layer between your steps code and the app itself, assuming you''re on rails. Not tried any of the other adapters (selenium etc) yet.> The reason I ask (instead of just trying it for myself) is that I''m > the only developer on most of the projects I work on, so I can''t > afford a huge drop in productivity. And if my efforts learning to > write specs are much of a guideline, it will probably take me 3-4 > weeks to get comfortable with writing stories.Make sure you read through the other threads on this list about declarative vs imperative stores etc - there''s a lot of learning been done even in the short amount of time this stuff has been used. I would expect to waste some time splashing around though, yup.> I know I need to learn this, so I want to focus my efforts where I > will get the most return on my time. > > Thanks > > PS. I am REALLY looking forward to the RSpec book! > _______________________________________________ > rspec-users mailing list > rspec-users at rubyforge.org > http://rubyforge.org/mailman/listinfo/rspec-userscheers, Matt ---- http://blog.mattwynne.net http://songkick.com In case you wondered: The opinions expressed in this email are my own and do not necessarily reflect the views of any former, current or future employers of mine.
On Tue, Sep 9, 2008 at 6:42 AM, DyingToLearn <phylae at gmail.com> wrote:> Hi, > > Here is the short version of my question: > For stories, is webrat the way to go? How many of you use webrat? How > many don''t? >I use it and love it. When it doesn''t do what I need (rarely) it''s trivial to drop down an abstraction level and do request/response stuff. Webrat doesn''t replace the standard Rails integration API - it just adds a higher level abstraction level on top. So there is no risk involved.> Here is the long version: > I have been writing specs for some time now. I have noticed that once > I learned how to write specs (both the syntax and the techniques) it > made my development much faster and more reliable. However, while I > was learning my development was painfully slow. So far it seems to be > the same with stories. > > >From the recent posts I''ve seen on this mailing list, it looks like I > should focus my efforts on learning cucumber instead of the built-in > story runner. It is mostly compatible with what is already in RSpec, > and it has some good extra features. Do you generally agree with that? >I would say I agree, but I am obviously biased.> What I am confused about, is whether or not I should learn webrat. It > looks great in theory, and I''ve see it mentioned a few times. But I > haven''t seen a wide-spread move towards it. On top of that, the first > time I looked at it I got rather confused. > > The reason I ask (instead of just trying it for myself) is that I''m > the only developer on most of the projects I work on, so I can''t > afford a huge drop in productivity. And if my efforts learning to > write specs are much of a guideline, it will probably take me 3-4 > weeks to get comfortable with writing stories. >If you already know RSpec I think you''d pick it up faster. Cucumber has some documentation that might be helpful: http://github.com/aslakhellesoy/cucumber/wikis/ruby-on-rails Hopefully the generators should be helpful for newbies. Cheers, Aslak> I know I need to learn this, so I want to focus my efforts where I > will get the most return on my time. > > Thanks > > PS. I am REALLY looking forward to the RSpec book! > _______________________________________________ > rspec-users mailing list > rspec-users at rubyforge.org > http://rubyforge.org/mailman/listinfo/rspec-users >
Thank you all for your responses. This has been really helpful! Matt Wynne wrote:> I would expect to waste some time splashing around though, yup.I think I am going to have to book a "day off" next week and just dive into it all: lots of reading and lots of practice. Thanks again, Paul
I''d like to know: in a nutshell what''s the difference between Webrat and Cucumber? I saw that in RSpec 1.1.5, Story Runner will be replaced by Cucumber, so isn''t learning Cucumber compulsory? -- Posted via http://www.ruby-forum.com/.
They''re separate - Cucumber parallels RSpec Story Runner and replaces that, not WebRat. On Wed, Sep 24, 2008 at 12:43 PM, Fernando Perez <lists at ruby-forum.com>wrote:> I''d like to know: in a nutshell what''s the difference between Webrat and > Cucumber? > > I saw that in RSpec 1.1.5, Story Runner will be replaced by Cucumber, so > isn''t learning Cucumber compulsory? > -- > Posted via http://www.ruby-forum.com/. > _______________________________________________ > rspec-users mailing list > rspec-users at rubyforge.org > http://rubyforge.org/mailman/listinfo/rspec-users >-- Christopher Bailey Cobalt Edge LLC http://cobaltedge.com -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://rubyforge.org/pipermail/rspec-users/attachments/20080924/6d4ce57b/attachment.html>
On Wed, Sep 24, 2008 at 2:43 PM, Fernando Perez <lists at ruby-forum.com> wrote:> I''d like to know: in a nutshell what''s the difference between Webrat and > Cucumber? > > I saw that in RSpec 1.1.5, Story Runner will be replaced by Cucumber, so > isn''t learning Cucumber compulsory?No you didn''t. You saw that AFTER RSpec 1.1.5, Story Runner will be replaced by Cucumber. Please be careful when you spread this sort of information. As for the different libraries, you can use Webrat in the context of Story Runner, Cucumber or Rails integration tests. Read more about each here: http://github.com/aslakhellesoy/cucumber/wikis http://github.com/brynary/webrat/tree/master Cheers, David
On Wed, Sep 24, 2008 at 9:43 PM, Fernando Perez <lists at ruby-forum.com> wrote:> I''d like to know: in a nutshell what''s the difference between Webrat and > Cucumber? >They do completely different things. Webrat is a library that allows you to interact with a Rails web app using a high level API similar to Watir and Selenium, but without the overhead of HTTP and a browser. In essence: go to this URL, fill in that field, click that button, follow that link. That sort of thing. It''s a library with a fairly small set of methods that you can call. Cucumber has nothing to do with Rails, webapps or Webrat for that matter (although you can use them together). Cucumber lets you write high level narratives of interactions between a person and a computer system in plain text, without knowledge of Ruby. Think of it as executable documentation/requirements. It also provides ruby programmers with "glue" that sits between these plain text scenarios and your app. In this "glue" (steps we call them) you can use whatever ruby libraries you want. For example Webrat. Or something else. It just happens that Cucumber+Webrat is a real nice blend if you happen to be writing a Rails app (if you''re writing a ruby app that is not Rails, Cucumber would still work well, but Webrat wouldn''t). Kind of like ham and eggs. But you don''t *have* to have egs with ham or vice versa. Please - no chunky bacon jokes! Aslak> I saw that in RSpec 1.1.5, Story Runner will be replaced by Cucumber, so > isn''t learning Cucumber compulsory? > -- > Posted via http://www.ruby-forum.com/. > _______________________________________________ > rspec-users mailing list > rspec-users at rubyforge.org > http://rubyforge.org/mailman/listinfo/rspec-users >
Hi, I just started playing with cucumber On Wed, 2008-09-17 at 22:44 +0200, aslak hellesoy wrote: <snip>> If you already know RSpec I think you''d pick it up faster. Cucumber > has some documentation that might be helpful: > http://github.com/aslakhellesoy/cucumber/wikis/ruby-on-rails >Definitely helpful - after following the steps here It runs (mostly, see below).> Hopefully the generators should be helpful for newbies.They clearly are to me. I created a new feature (for a new model "Invitation) and a rspec_scaffold as indicated on the page. With the generated Feature it is easy to see the differences with Rspec story runner and the way webrat should work. It took me a bit to figure out that the generated code assumes the Model has a :name field (my Invitation has a Subject that mostly identifies it). After fixing that, I get to 10 steps passed, 1 failed (and 6 skipped). Now I am stuck, because I do not understand the failure webrat seems to give- When I go to invitation/new, I see the Subject field, but WebRat doesn''t... : Feature: Manage invitations In order to keep track of invitations A invitation mechanic Should be able to manage several invitations Scenario: Register new invitation Given I am on the new invitation page When I fill in "Subject" with "My invitation subject" Could not find [Webrat::TextField, Webrat::TextareaField, Webrat::PasswordField]: "Subject" (RuntimeError) /home/willem/courses/experienceagile/ebay/trunk/excrm/vendor/plugins/webrat/lib/webrat/core/flunk.rb:4:in `flunk'' /home/willem/courses/experienceagile/ebay/trunk/excrm/vendor/plugins/webrat/lib/webrat/core/scope.rb:222:in `find_field'' /home/willem/courses/experienceagile/ebay/trunk/excrm/vendor/plugins/webrat/lib/webrat/core/scope.rb:25:in `fills_in'' /home/willem/courses/experienceagile/ebay/trunk/excrm/vendor/plugins/webrat/lib/webrat/rails/session.rb:24:in `send'' /home/willem/courses/experienceagile/ebay/trunk/excrm/vendor/plugins/webrat/lib/webrat/rails/session.rb:24:in `method_missing'' /usr/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/integration.rb:448:in `send!'' /usr/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/integration.rb:448:in `method_missing'' ./features/steps/common_webrat.rb:13:in `When /^I fill in "(.*)" with "(.*)"$/'' features/manage_invitations.feature:8:in `When I fill in "Subject" with "My invitation subject"'' I also installed the gems as indicated. "Subject" is a TextField, and I can see it... I would greatly appreciate any help... Kind regards, Willem - Willem van den Ende Living Software B.V. www.livingsoftware.nl | www.experienceagile.eu | blog: me.andering.com +31 6 413 06 965 | Spilmanstraat 25 | 5645 JE Eindhoven
On Sun, 2008-09-28 at 22:24 +0200, Willem van den Ende wrote: <snip>> When I go to invitation/new, I see the Subject field, but WebRat doesn''t... :<snip>> When I fill in "Subject" with "My invitation subject" > Could not find [Webrat::TextField, Webrat::TextareaField, Webrat::PasswordField]: "Subject" (RuntimeError)Ah. Figured it out. The cucumber code generator created (in manage_invitations.feature): When I fill in "Subject" with "My invitation subject" instead of When I fill in "invitation_subject" with "My invitation subject" which is what I saw in ''view source''. After changing all generated whens, I have 17 steps passed. It might indicate, as Aslak says in the readme, it is recommended to create your features by hand. On the other hand, it would also be convenient if the combination of generate feature and generate rspec_scaffold works out of the box. :) I''m going to play a bit more with it - too early to send in my own fix for the feature generator I guess. I am willing to make it if you want it though. Willem
On Mon, Sep 29, 2008 at 8:46 AM, Willem van den Ende <willem at willemvandenende.com> wrote:> On Sun, 2008-09-28 at 22:24 +0200, Willem van den Ende wrote: > <snip> >> When I go to invitation/new, I see the Subject field, but WebRat doesn''t... : > <snip> >> When I fill in "Subject" with "My invitation subject" >> Could not find [Webrat::TextField, Webrat::TextareaField, Webrat::PasswordField]: "Subject" (RuntimeError) > > Ah. Figured it out. The cucumber code generator created (in > manage_invitations.feature): > > When I fill in "Subject" with "My invitation subject" > > instead of > > When I fill in "invitation_subject" with "My invitation subject" > > which is what I saw in ''view source''. After changing all generated > whens, I have 17 steps passed. >In the definition of "When I fill in..." you can add this debug statement on the first line: puts response.body That should help you find the reason. Please post the HTML you see for the failing step. Also check log/test.log. Aslak> It might indicate, as Aslak says in the readme, it is recommended to > create your features by hand. On the other hand, it would also be > convenient if the combination of generate feature and generate > rspec_scaffold works out of the box. :) > > I''m going to play a bit more with it - too early to send in my own fix > for the feature generator I guess. I am willing to make it if you want > it though. > > Willem > > _______________________________________________ > rspec-users mailing list > rspec-users at rubyforge.org > http://rubyforge.org/mailman/listinfo/rspec-users >
Hi Aslak, thanks for responding (more below). On Mon, 2008-09-29 at 08:48 +0200, aslak hellesoy wrote:> On Mon, Sep 29, 2008 at 8:46 AM, Willem van den Ende > <willem at willemvandenende.com> wrote: > > On Sun, 2008-09-28 at 22:24 +0200, Willem van den Ende wrote: > > <snip> > >> When I go to invitation/new, I see the Subject field, but WebRat doesn''t... : > > <snip> > >> When I fill in "Subject" with "My invitation subject" > >> Could not find [Webrat::TextField, Webrat::TextareaField, Webrat::PasswordField]: "Subject" (RuntimeError) > > > > Ah. Figured it out. The cucumber code generator created (in > > manage_invitations.feature): > > > > When I fill in "Subject" with "My invitation subject" > > > > instead of > > > > When I fill in "invitation_subject" with "My invitation subject" > > > > which is what I saw in ''view source''. After changing all generated > > whens, I have 17 steps passed. > > > > In the definition of "When I fill in..." you can add this debug > statement on the first line: > > puts response.bodyOk.> That should help you find the reason. Please post the HTML you see for > the failing step.Done, see below. It seems WebRat goes looking for the id (invitation_subject) and can''t find it if you write When I fill in "Subject" with "My invitation subject", but does find When I fill in "invitation_subject" with "My invitation subject", The way it is generated communicates much better with the customer of course... :) (it is the fields label, maybe the label in the html generated by rspec_scaffold should not be <b>Subject</b> but something else? ). trace with HTML: Feature: Manage invitations In order to keep track of invitations A invitation mechanic Should be able to manage several invitations Scenario: Register new invitation Given I am on the new invitation page <h1>New invitation</h1> <form action="/invitations" class="new_invitation" id="new_invitation" method="post"> <p> <b>Subject</b><br /> <input id="invitation_subject" name="invitation[subject]" size="30" type="text" /> </p> <p> <b>Cc</b><br /> <input id="invitation_cc" name="invitation[cc]" size="30" type="text" /> </p> <p> <b>Text</b><br /> <textarea cols="40" id="invitation_text" name="invitation[text]" rows="20"></textarea> </p> <p> <input id="invitation_submit" name="commit" type="submit" value="Create" /> </p> </form> <a href="/invitations">Back</a> When I fill in "Subject" with "My invitation subject" Could not find [Webrat::TextField, Webrat::TextareaField, Webrat::PasswordField]: "Subject" (RuntimeError) /home/willem/courses/experienceagile/ebay/trunk/excrm/vendor/plugins/webrat/lib/webrat/core/flunk.rb:4:in `flunk'' /home/willem/courses/experienceagile/ebay/trunk/excrm/vendor/plugins/webrat/lib/webrat/core/scope.rb:222:in `find_field'' /home/willem/courses/experienceagile/ebay/trunk/excrm/vendor/plugins/webrat/lib/webrat/core/scope.rb:25:in `fills_in'' /home/willem/courses/experienceagile/ebay/trunk/excrm/vendor/plugins/webrat/lib/webrat/rails/session.rb:24:in `send'' /home/willem/courses/experienceagile/ebay/trunk/excrm/vendor/plugins/webrat/lib/webrat/rails/session.rb:24:in `method_missing'' /usr/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/integration.rb:448:in `send!'' /usr/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/integration.rb:448:in `method_missing'' ./features/steps/common_webrat.rb:14:in `When /^I fill in "(.*)" with "(.*)"$/'' features/manage_invitations.feature:8:in `When I fill in "Subject" with "My invitation subject"'' <h1>New invitation</h1> <form action="/invitations" class="new_invitation" id="new_invitation" method="post"> <p> <b>Subject</b><br /> <input id="invitation_subject" name="invitation[subject]" size="30" type="text" /> </p> <p> <b>Cc</b><br /> <input id="invitation_cc" name="invitation[cc]" size="30" type="text" /> </p> <p> <b>Text</b><br /> <textarea cols="40" id="invitation_text" name="invitation[text]" rows="20"></textarea> </p> <p> <input id="invitation_submit" name="commit" type="submit" value="Create" /> </p> </form> <a href="/invitations">Back</a> And I fill in "CC" with "My invitation cc" <h1>New invitation</h1> <form action="/invitations" class="new_invitation" id="new_invitation" method="post"> <p> <b>Subject</b><br /> <input id="invitation_subject" name="invitation[subject]" size="30" type="text" /> </p> <p> <b>Cc</b><br /> <input id="invitation_cc" name="invitation[cc]" size="30" type="text" /> </p> <p> <b>Text</b><br /> <rake aborted! Command failed with status (1): [/usr/bin/ruby1.8 -I "/home/willem/courses/...] /usr/lib/ruby/gems/1.8/gems/rake-0.8.2/lib/rake.rb:974:in `sh'' /usr/lib/ruby/gems/1.8/gems/rake-0.8.2/lib/rake.rb:987:in `call'' /usr/lib/ruby/gems/1.8/gems/rake-0.8.2/lib/rake.rb:987:in `sh'' /usr/lib/ruby/gems/1.8/gems/rake-0.8.2/lib/rake.rb:1084:in `sh'' /usr/lib/ruby/gems/1.8/gems/rake-0.8.2/lib/rake.rb:1019:in `ruby'' /usr/lib/ruby/gems/1.8/gems/rake-0.8.2/lib/rake.rb:1084:in `ruby'' /home/willem/courses/experienceagile/ebay/trunk/excrm/vendor/plugins/cucumber/lib/cucumber/rake/task.rb:47:in `define_tasks'' /usr/lib/ruby/gems/1.8/gems/rake-0.8.2/lib/rake.rb:621:in `call'' /usr/lib/ruby/gems/1.8/gems/rake-0.8.2/lib/rake.rb:621:in `execute'' /usr/lib/ruby/gems/1.8/gems/rake-0.8.2/lib/rake.rb:616:in `each'' /usr/lib/ruby/gems/1.8/gems/rake-0.8.2/lib/rake.rb:616:in `execute'' /usr/lib/ruby/gems/1.8/gems/rake-0.8.2/lib/rake.rb:582:in `invoke_with_call_chain'' /usr/lib/ruby/1.8/monitor.rb:242:in `synchronize'' /usr/lib/ruby/gems/1.8/gems/rake-0.8.2/lib/rake.rb:575:in `invoke_with_call_chain'' /usr/lib/ruby/gems/1.8/gems/rake-0.8.2/lib/rake.rb:568:in `invoke'' /usr/lib/ruby/gems/1.8/gems/rake-0.8.2/lib/rake.rb:2031:in `invoke_task'' /usr/lib/ruby/gems/1.8/gems/rake-0.8.2/lib/rake.rb:2009:in `top_level'' /usr/lib/ruby/gems/1.8/gems/rake-0.8.2/lib/rake.rb:2009:in `each'' /usr/lib/ruby/gems/1.8/gems/rake-0.8.2/lib/rake.rb:2009:in `top_level'' /usr/lib/ruby/gems/1.8/gems/rake-0.8.2/lib/rake.rb:2048:in `standard_exception_handling'' /usr/lib/ruby/gems/1.8/gems/rake-0.8.2/lib/rake.rb:2003:in `top_level'' /usr/lib/ruby/gems/1.8/gems/rake-0.8.2/lib/rake.rb:1982:in `run'' /usr/lib/ruby/gems/1.8/gems/rake-0.8.2/lib/rake.rb:2048:in `standard_exception_handling'' /usr/lib/ruby/gems/1.8/gems/rake-0.8.2/lib/rake.rb:1979:in `run'' /usr/lib/ruby/gems/1.8/gems/rake-0.8.2/bin/rake:31 /usr/bin/rake:19:in `load'' /usr/bin/rake:19 textarea cols="40" id="invitation_text" name="invitation[text]" rows="20"></textarea> </p> <p> <input id="invitation_submit" name="commit" type="submit" value="Create" /> </p> </form> <a href="/invitations">Back</a> And I fill in "Text" with "My invitation text" And I press "Create" Then I should see "My invitation subject" And I should see "My invitation cc" And I should see "My invitation text" Scenario: Delete invitation Given there are 4 invitations When I delete the first invitation Then there should be 3 invitations left |initial|after| |100|99| |1|0| 10 steps passed 1 steps failed 6 steps skipped> Also check log/test.log.(apologies for the ESC characters, less doesn''t seem to recognize the colours....) Processing InvitationsController#new (for 127.0.0.1 at 2008-09-29 08:55:04) [GET] Session ID: 56bcf61f1eb75b3e8c973a21bca504d0 Parameters: {"action"=>"new", "controller"=>"invitations"} ESC[4;35;1mSQL (0.004048)ESC[0m ESC[0m SELECT a.attname, format_type(a.atttypid, a.atttypmod), d. adsrc, a.attnotnull FROM pg_attribute a LEFT JOIN pg_attrdef d ON a.attrelid = d.adrelid AND a.attnum = d.adnum WHERE a.attrelid = ''invitations''::regclass AND a.attnum > 0 AND NOT a.attisdropped ORDER BY a.attnum ESC[0m Rendering invitations/new Completed in 0.01889 (52 reqs/sec) | Rendering: 0.00598 (31%) | DB: 0.00550 (29%) | 200 OK [http://ww w.example.com/invitations/new] REQUESTING PAGE: POST /invitations with {"commit"=>"Create", "invitation"=>{"cc"=>"", "text"=>"", "su bject"=>""}} Processing InvitationsController#create (for 127.0.0.1 at 2008-09-29 08:55:04) [POST] Session ID: BAh7BiIKZmxhc2hJQzonQWN0aW9uQ29udHJvbGxlcjo6Rmxhc2g6OkZsYXNo% 0ASGFzaHsABjoKQHVzZWR7AA%3 D%3D--4a442a5c5f1558d51188e7e418677dedf9dd2717 Parameters: {"commit"=>"Create", "action"=>"create", "controller"=>"invitations", "invitation"=>{"c c"=>"", "text"=>"", "subject"=>""}} ESC[4;36;1mPK and serial sequence (0.005058)ESC[0m ESC[0;1m SELECT attr.attname, seq.relname FROM pg_class seq, pg_attribute attr, pg_depend dep, pg_namespace name, pg_constraint cons WHERE seq.oid = dep.objid AND seq.relkind = ''S'' AND attr.attrelid = dep.refobjid AND attr.attnum = dep.refobjsubid AND attr.attrelid = cons.conrelid AND attr.attnum = cons.conkey[1] AND cons.contype = ''p'' AND dep.refobjid = ''invitations''::regclass ESC[0m ESC[4;35;1mInvitation Create (0.001065)ESC[0m ESC[0mINSERT INTO invitations ("cc", "updated_at", "text", "subject", "created_at") VALUES(E'''', ''2008-09-29 08:55:04.858034'', E'''', E'''', ''2008-09-29 08:55:04.858034'')ESC[0m ESC[4;36;1mSQL (0.000500)ESC[0m ESC[0;1mSELECT currval(''invitations_id_seq'')ESC[0m Redirected to http://www.example.com/invitations/1 Completed in 0.01049 (95 reqs/sec) | DB: 0.00662 (63%) | 302 Found [http://www.example.com/invitations] Willem> > Aslak > > > It might indicate, as Aslak says in the readme, it is recommended to > > create your features by hand. On the other hand, it would also be > > convenient if the combination of generate feature and generate > > rspec_scaffold works out of the box. :) > > > > I''m going to play a bit more with it - too early to send in my own fix > > for the feature generator I guess. I am willing to make it if you want > > it though. > > > > Willem > > > > _______________________________________________ > > rspec-users mailing list > > rspec-users at rubyforge.org > > http://rubyforge.org/mailman/listinfo/rspec-users > >
On Mon, Sep 29, 2008 at 9:07 AM, Willem van den Ende <willem at willemvandenende.com> wrote:> Hi Aslak, > > thanks for responding (more below). > > On Mon, 2008-09-29 at 08:48 +0200, aslak hellesoy wrote: >> On Mon, Sep 29, 2008 at 8:46 AM, Willem van den Ende >> <willem at willemvandenende.com> wrote: >> > On Sun, 2008-09-28 at 22:24 +0200, Willem van den Ende wrote: >> > <snip> >> >> When I go to invitation/new, I see the Subject field, but WebRat doesn''t... : >> > <snip> >> >> When I fill in "Subject" with "My invitation subject" >> >> Could not find [Webrat::TextField, Webrat::TextareaField, Webrat::PasswordField]: "Subject" (RuntimeError) >> > >> > Ah. Figured it out. The cucumber code generator created (in >> > manage_invitations.feature): >> > >> > When I fill in "Subject" with "My invitation subject" >> > >> > instead of >> > >> > When I fill in "invitation_subject" with "My invitation subject" >> > >> > which is what I saw in ''view source''. After changing all generated >> > whens, I have 17 steps passed. >> > >> >> In the definition of "When I fill in..." you can add this debug >> statement on the first line: >> >> puts response.body > > Ok. > >> That should help you find the reason. Please post the HTML you see for >> the failing step. > > Done, see below. It seems WebRat goes looking for the id > (invitation_subject) and can''t find it if you write > When I fill in "Subject" with "My invitation subject", > but does find > When I fill in "invitation_subject" with "My invitation subject", > > The way it is generated communicates much better with the customer of > course... :) (it is the fields label, maybe the label in the html > generated by rspec_scaffold should not be <b>Subject</b> but something > else? ). > > trace with HTML: > Feature: Manage invitations > In order to keep track of invitations > A invitation mechanic > Should be able to manage several invitations > > Scenario: Register new invitation > Given I am on the new invitation page > <h1>New invitation</h1> > > > > <form action="/invitations" class="new_invitation" id="new_invitation" > method="post"> > <p> > <b>Subject</b><br /> > <input id="invitation_subject" name="invitation[subject]" size="30" > type="text" /> > </p> >Try to replace <b>Subject</b> with <label for="invitation_subject">Subject</label> Now both vision impaired people and Webrat know that the text "Subject" is linked to the input field. This is much better semantic HTML. Rails generates this as of http://github.com/rails/rails/commit/3dd6027f708a472064e73a50f4afb433f338bf09 Sounds like you''re using an older Rails... Aslak> <p> > <b>Cc</b><br /> > <input id="invitation_cc" name="invitation[cc]" size="30" > type="text" /> > </p> > > <p> > <b>Text</b><br /> > <textarea cols="40" id="invitation_text" name="invitation[text]" > rows="20"></textarea> > </p> > > <p> > <input id="invitation_submit" name="commit" type="submit" > value="Create" /> > </p> > </form> > > <a href="/invitations">Back</a> > When I fill in "Subject" with "My invitation subject" > Could not find [Webrat::TextField, Webrat::TextareaField, > Webrat::PasswordField]: "Subject" (RuntimeError) > /home/willem/courses/experienceagile/ebay/trunk/excrm/vendor/plugins/webrat/lib/webrat/core/flunk.rb:4:in `flunk'' > /home/willem/courses/experienceagile/ebay/trunk/excrm/vendor/plugins/webrat/lib/webrat/core/scope.rb:222:in `find_field'' > /home/willem/courses/experienceagile/ebay/trunk/excrm/vendor/plugins/webrat/lib/webrat/core/scope.rb:25:in `fills_in'' > /home/willem/courses/experienceagile/ebay/trunk/excrm/vendor/plugins/webrat/lib/webrat/rails/session.rb:24:in `send'' > /home/willem/courses/experienceagile/ebay/trunk/excrm/vendor/plugins/webrat/lib/webrat/rails/session.rb:24:in `method_missing'' > /usr/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/integration.rb:448:in `send!'' > /usr/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/integration.rb:448:in `method_missing'' > ./features/steps/common_webrat.rb:14:in `When /^I fill in "(.*)" > with "(.*)"$/'' > features/manage_invitations.feature:8:in `When I fill in "Subject" > with "My invitation subject"'' > <h1>New invitation</h1> > > > > <form action="/invitations" class="new_invitation" id="new_invitation" > method="post"> > <p> > <b>Subject</b><br /> > <input id="invitation_subject" name="invitation[subject]" size="30" > type="text" /> > </p> > > <p> > <b>Cc</b><br /> > <input id="invitation_cc" name="invitation[cc]" size="30" > type="text" /> > </p> > > <p> > <b>Text</b><br /> > <textarea cols="40" id="invitation_text" name="invitation[text]" > rows="20"></textarea> > </p> > > <p> > <input id="invitation_submit" name="commit" type="submit" > value="Create" /> > </p> > </form> > > <a href="/invitations">Back</a> > And I fill in "CC" with "My invitation cc" > <h1>New invitation</h1> > > > > <form action="/invitations" class="new_invitation" id="new_invitation" > method="post"> > <p> > <b>Subject</b><br /> > <input id="invitation_subject" name="invitation[subject]" size="30" > type="text" /> > </p> > > <p> > <b>Cc</b><br /> > <input id="invitation_cc" name="invitation[cc]" size="30" > type="text" /> > </p> > > <p> > <b>Text</b><br /> > <rake aborted! > Command failed with status (1): [/usr/bin/ruby1.8 -I > "/home/willem/courses/...] > /usr/lib/ruby/gems/1.8/gems/rake-0.8.2/lib/rake.rb:974:in `sh'' > /usr/lib/ruby/gems/1.8/gems/rake-0.8.2/lib/rake.rb:987:in `call'' > /usr/lib/ruby/gems/1.8/gems/rake-0.8.2/lib/rake.rb:987:in `sh'' > /usr/lib/ruby/gems/1.8/gems/rake-0.8.2/lib/rake.rb:1084:in `sh'' > /usr/lib/ruby/gems/1.8/gems/rake-0.8.2/lib/rake.rb:1019:in `ruby'' > /usr/lib/ruby/gems/1.8/gems/rake-0.8.2/lib/rake.rb:1084:in `ruby'' > /home/willem/courses/experienceagile/ebay/trunk/excrm/vendor/plugins/cucumber/lib/cucumber/rake/task.rb:47:in `define_tasks'' > /usr/lib/ruby/gems/1.8/gems/rake-0.8.2/lib/rake.rb:621:in `call'' > /usr/lib/ruby/gems/1.8/gems/rake-0.8.2/lib/rake.rb:621:in `execute'' > /usr/lib/ruby/gems/1.8/gems/rake-0.8.2/lib/rake.rb:616:in `each'' > /usr/lib/ruby/gems/1.8/gems/rake-0.8.2/lib/rake.rb:616:in `execute'' > /usr/lib/ruby/gems/1.8/gems/rake-0.8.2/lib/rake.rb:582:in > `invoke_with_call_chain'' > /usr/lib/ruby/1.8/monitor.rb:242:in `synchronize'' > /usr/lib/ruby/gems/1.8/gems/rake-0.8.2/lib/rake.rb:575:in > `invoke_with_call_chain'' > /usr/lib/ruby/gems/1.8/gems/rake-0.8.2/lib/rake.rb:568:in `invoke'' > /usr/lib/ruby/gems/1.8/gems/rake-0.8.2/lib/rake.rb:2031:in `invoke_task'' > /usr/lib/ruby/gems/1.8/gems/rake-0.8.2/lib/rake.rb:2009:in `top_level'' > /usr/lib/ruby/gems/1.8/gems/rake-0.8.2/lib/rake.rb:2009:in `each'' > /usr/lib/ruby/gems/1.8/gems/rake-0.8.2/lib/rake.rb:2009:in `top_level'' > /usr/lib/ruby/gems/1.8/gems/rake-0.8.2/lib/rake.rb:2048:in > `standard_exception_handling'' > /usr/lib/ruby/gems/1.8/gems/rake-0.8.2/lib/rake.rb:2003:in `top_level'' > /usr/lib/ruby/gems/1.8/gems/rake-0.8.2/lib/rake.rb:1982:in `run'' > /usr/lib/ruby/gems/1.8/gems/rake-0.8.2/lib/rake.rb:2048:in > `standard_exception_handling'' > /usr/lib/ruby/gems/1.8/gems/rake-0.8.2/lib/rake.rb:1979:in `run'' > /usr/lib/ruby/gems/1.8/gems/rake-0.8.2/bin/rake:31 > /usr/bin/rake:19:in `load'' > /usr/bin/rake:19 > textarea cols="40" id="invitation_text" name="invitation[text]" > rows="20"></textarea> > </p> > > <p> > <input id="invitation_submit" name="commit" type="submit" > value="Create" /> > </p> > </form> > > <a href="/invitations">Back</a> > And I fill in "Text" with "My invitation text" > And I press "Create" > Then I should see "My invitation subject" > And I should see "My invitation cc" > And I should see "My invitation text" > > Scenario: Delete invitation > Given there are 4 invitations > When I delete the first invitation > Then there should be 3 invitations left > > |initial|after| > |100|99| > |1|0| > > 10 steps passed > 1 steps failed > 6 steps skipped > >> Also check log/test.log. > (apologies for the ESC characters, less doesn''t seem to recognize the > colours....) > > Processing InvitationsController#new (for 127.0.0.1 at 2008-09-29 > 08:55:04) [GET] > Session ID: 56bcf61f1eb75b3e8c973a21bca504d0 > Parameters: {"action"=>"new", "controller"=>"invitations"} > ESC[4;35;1mSQL (0.004048)ESC[0m ESC[0m SELECT a.attname, > format_type(a.atttypid, a.atttypmod), d. > adsrc, a.attnotnull > FROM pg_attribute a LEFT JOIN pg_attrdef d > ON a.attrelid = d.adrelid AND a.attnum = d.adnum > WHERE a.attrelid = ''invitations''::regclass > AND a.attnum > 0 AND NOT a.attisdropped > ORDER BY a.attnum > ESC[0m > Rendering invitations/new > Completed in 0.01889 (52 reqs/sec) | Rendering: 0.00598 (31%) | DB: > 0.00550 (29%) | 200 OK [http://ww > w.example.com/invitations/new] > REQUESTING PAGE: POST /invitations with {"commit"=>"Create", > "invitation"=>{"cc"=>"", "text"=>"", "su > bject"=>""}} > > > Processing InvitationsController#create (for 127.0.0.1 at 2008-09-29 > 08:55:04) [POST] > Session ID: > BAh7BiIKZmxhc2hJQzonQWN0aW9uQ29udHJvbGxlcjo6Rmxhc2g6OkZsYXNo% > 0ASGFzaHsABjoKQHVzZWR7AA%3 > D%3D--4a442a5c5f1558d51188e7e418677dedf9dd2717 > Parameters: {"commit"=>"Create", "action"=>"create", > "controller"=>"invitations", "invitation"=>{"c > c"=>"", "text"=>"", "subject"=>""}} > ESC[4;36;1mPK and serial sequence (0.005058)ESC[0m ESC[0;1m SELECT > attr.attname, seq.relname > FROM pg_class seq, > pg_attribute attr, > pg_depend dep, > pg_namespace name, > pg_constraint cons > WHERE seq.oid = dep.objid > AND seq.relkind = ''S'' > AND attr.attrelid = dep.refobjid > AND attr.attnum = dep.refobjsubid > AND attr.attrelid = cons.conrelid > AND attr.attnum = cons.conkey[1] > AND cons.contype = ''p'' > AND dep.refobjid = ''invitations''::regclass > ESC[0m > ESC[4;35;1mInvitation Create (0.001065)ESC[0m ESC[0mINSERT INTO > invitations ("cc", "updated_at", > "text", "subject", "created_at") VALUES(E'''', ''2008-09-29 > 08:55:04.858034'', E'''', E'''', ''2008-09-29 08:55:04.858034'')ESC[0m > ESC[4;36;1mSQL (0.000500)ESC[0m ESC[0;1mSELECT > currval(''invitations_id_seq'')ESC[0m > Redirected to http://www.example.com/invitations/1 > Completed in 0.01049 (95 reqs/sec) | DB: 0.00662 (63%) | 302 Found > [http://www.example.com/invitations] > > > Willem >> >> Aslak >> >> > It might indicate, as Aslak says in the readme, it is recommended to >> > create your features by hand. On the other hand, it would also be >> > convenient if the combination of generate feature and generate >> > rspec_scaffold works out of the box. :) >> > >> > I''m going to play a bit more with it - too early to send in my own fix >> > for the feature generator I guess. I am willing to make it if you want >> > it though. >> > >> > Willem >> > >> > _______________________________________________ >> > rspec-users mailing list >> > rspec-users at rubyforge.org >> > http://rubyforge.org/mailman/listinfo/rspec-users >> > > >
On Mon, 2008-09-29 at 09:57 +0200, aslak hellesoy wrote:> <snip> > > Try to replace <b>Subject</b> with <label > for="invitation_subject">Subject</label> > Now both vision impaired people and Webrat know that the text > "Subject" is linked to the input field. This is much better semantic > HTML.Ah, thanks. I''ll do that. I had seen the labels in one of my other rails projects. This also makes the Feature a lot more readable.> > Rails generates this as of > http://github.com/rails/rails/commit/3dd6027f708a472064e73a50f4afb433f338bf09 > Sounds like you''re using an older Rails...yes.... 2.0.2. Normally I keep my rails apps up to date, but for this one I''ve use ActiveScaffold quite a bit, and it was broken with 2.1... ActiveScaffold looks pretty inactive, so I''m going to add specs for everything, do the UI manually and then I can let ActiveScaffold go after a while... (It also turned out that the work it saved me in the beginning - spec/test and code Models, declare controllers and views, so it can go without speccing, bit me later... because of the ''clever bastard code'' in active scaffold with lots of reflection, stacktraces are pretty incomprehensible - e.g. when I forget to spec something in the model and there is a nullpointer somewhere the same stacktrace appears for every model). Thanks again, Willem> > Aslak > > > <p> > > <b>Cc</b><br /> > > <input id="invitation_cc" name="invitation[cc]" size="30" > > type="text" /> > > </p> > > > > <p> > > <b>Text</b><br /> > > <textarea cols="40" id="invitation_text" name="invitation[text]" > > rows="20"></textarea> > > </p> > > > > <p> > > <input id="invitation_submit" name="commit" type="submit" > > value="Create" /> > > </p> > > </form> > > > > <a href="/invitations">Back</a> > > When I fill in "Subject" with "My invitation subject" > > Could not find [Webrat::TextField, Webrat::TextareaField, > > Webrat::PasswordField]: "Subject" (RuntimeError) > > /home/willem/courses/experienceagile/ebay/trunk/excrm/vendor/plugins/webrat/lib/webrat/core/flunk.rb:4:in `flunk'' > > /home/willem/courses/experienceagile/ebay/trunk/excrm/vendor/plugins/webrat/lib/webrat/core/scope.rb:222:in `find_field'' > > /home/willem/courses/experienceagile/ebay/trunk/excrm/vendor/plugins/webrat/lib/webrat/core/scope.rb:25:in `fills_in'' > > /home/willem/courses/experienceagile/ebay/trunk/excrm/vendor/plugins/webrat/lib/webrat/rails/session.rb:24:in `send'' > > /home/willem/courses/experienceagile/ebay/trunk/excrm/vendor/plugins/webrat/lib/webrat/rails/session.rb:24:in `method_missing'' > > /usr/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/integration.rb:448:in `send!'' > > /usr/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/integration.rb:448:in `method_missing'' > > ./features/steps/common_webrat.rb:14:in `When /^I fill in "(.*)" > > with "(.*)"$/'' > > features/manage_invitations.feature:8:in `When I fill in "Subject" > > with "My invitation subject"'' > > <h1>New invitation</h1> > > > > > > > > <form action="/invitations" class="new_invitation" id="new_invitation" > > method="post"> > > <p> > > <b>Subject</b><br /> > > <input id="invitation_subject" name="invitation[subject]" size="30" > > type="text" /> > > </p> > > > > <p> > > <b>Cc</b><br /> > > <input id="invitation_cc" name="invitation[cc]" size="30" > > type="text" /> > > </p> > > > > <p> > > <b>Text</b><br /> > > <textarea cols="40" id="invitation_text" name="invitation[text]" > > rows="20"></textarea> > > </p> > > > > <p> > > <input id="invitation_submit" name="commit" type="submit" > > value="Create" /> > > </p> > > </form> > > > > <a href="/invitations">Back</a> > > And I fill in "CC" with "My invitation cc" > > <h1>New invitation</h1> > > > > > > > > <form action="/invitations" class="new_invitation" id="new_invitation" > > method="post"> > > <p> > > <b>Subject</b><br /> > > <input id="invitation_subject" name="invitation[subject]" size="30" > > type="text" /> > > </p> > > > > <p> > > <b>Cc</b><br /> > > <input id="invitation_cc" name="invitation[cc]" size="30" > > type="text" /> > > </p> > > > > <p> > > <b>Text</b><br /> > > <rake aborted! > > Command failed with status (1): [/usr/bin/ruby1.8 -I > > "/home/willem/courses/...] > > /usr/lib/ruby/gems/1.8/gems/rake-0.8.2/lib/rake.rb:974:in `sh'' > > /usr/lib/ruby/gems/1.8/gems/rake-0.8.2/lib/rake.rb:987:in `call'' > > /usr/lib/ruby/gems/1.8/gems/rake-0.8.2/lib/rake.rb:987:in `sh'' > > /usr/lib/ruby/gems/1.8/gems/rake-0.8.2/lib/rake.rb:1084:in `sh'' > > /usr/lib/ruby/gems/1.8/gems/rake-0.8.2/lib/rake.rb:1019:in `ruby'' > > /usr/lib/ruby/gems/1.8/gems/rake-0.8.2/lib/rake.rb:1084:in `ruby'' > > /home/willem/courses/experienceagile/ebay/trunk/excrm/vendor/plugins/cucumber/lib/cucumber/rake/task.rb:47:in `define_tasks'' > > /usr/lib/ruby/gems/1.8/gems/rake-0.8.2/lib/rake.rb:621:in `call'' > > /usr/lib/ruby/gems/1.8/gems/rake-0.8.2/lib/rake.rb:621:in `execute'' > > /usr/lib/ruby/gems/1.8/gems/rake-0.8.2/lib/rake.rb:616:in `each'' > > /usr/lib/ruby/gems/1.8/gems/rake-0.8.2/lib/rake.rb:616:in `execute'' > > /usr/lib/ruby/gems/1.8/gems/rake-0.8.2/lib/rake.rb:582:in > > `invoke_with_call_chain'' > > /usr/lib/ruby/1.8/monitor.rb:242:in `synchronize'' > > /usr/lib/ruby/gems/1.8/gems/rake-0.8.2/lib/rake.rb:575:in > > `invoke_with_call_chain'' > > /usr/lib/ruby/gems/1.8/gems/rake-0.8.2/lib/rake.rb:568:in `invoke'' > > /usr/lib/ruby/gems/1.8/gems/rake-0.8.2/lib/rake.rb:2031:in `invoke_task'' > > /usr/lib/ruby/gems/1.8/gems/rake-0.8.2/lib/rake.rb:2009:in `top_level'' > > /usr/lib/ruby/gems/1.8/gems/rake-0.8.2/lib/rake.rb:2009:in `each'' > > /usr/lib/ruby/gems/1.8/gems/rake-0.8.2/lib/rake.rb:2009:in `top_level'' > > /usr/lib/ruby/gems/1.8/gems/rake-0.8.2/lib/rake.rb:2048:in > > `standard_exception_handling'' > > /usr/lib/ruby/gems/1.8/gems/rake-0.8.2/lib/rake.rb:2003:in `top_level'' > > /usr/lib/ruby/gems/1.8/gems/rake-0.8.2/lib/rake.rb:1982:in `run'' > > /usr/lib/ruby/gems/1.8/gems/rake-0.8.2/lib/rake.rb:2048:in > > `standard_exception_handling'' > > /usr/lib/ruby/gems/1.8/gems/rake-0.8.2/lib/rake.rb:1979:in `run'' > > /usr/lib/ruby/gems/1.8/gems/rake-0.8.2/bin/rake:31 > > /usr/bin/rake:19:in `load'' > > /usr/bin/rake:19 > > textarea cols="40" id="invitation_text" name="invitation[text]" > > rows="20"></textarea> > > </p> > > > > <p> > > <input id="invitation_submit" name="commit" type="submit" > > value="Create" /> > > </p> > > </form> > > > > <a href="/invitations">Back</a> > > And I fill in "Text" with "My invitation text" > > And I press "Create" > > Then I should see "My invitation subject" > > And I should see "My invitation cc" > > And I should see "My invitation text" > > > > Scenario: Delete invitation > > Given there are 4 invitations > > When I delete the first invitation > > Then there should be 3 invitations left > > > > |initial|after| > > |100|99| > > |1|0| > > > > 10 steps passed > > 1 steps failed > > 6 steps skipped > > > >> Also check log/test.log. > > (apologies for the ESC characters, less doesn''t seem to recognize the > > colours....) > > > > Processing InvitationsController#new (for 127.0.0.1 at 2008-09-29 > > 08:55:04) [GET] > > Session ID: 56bcf61f1eb75b3e8c973a21bca504d0 > > Parameters: {"action"=>"new", "controller"=>"invitations"} > > ESC[4;35;1mSQL (0.004048)ESC[0m ESC[0m SELECT a.attname, > > format_type(a.atttypid, a.atttypmod), d. > > adsrc, a.attnotnull > > FROM pg_attribute a LEFT JOIN pg_attrdef d > > ON a.attrelid = d.adrelid AND a.attnum = d.adnum > > WHERE a.attrelid = ''invitations''::regclass > > AND a.attnum > 0 AND NOT a.attisdropped > > ORDER BY a.attnum > > ESC[0m > > Rendering invitations/new > > Completed in 0.01889 (52 reqs/sec) | Rendering: 0.00598 (31%) | DB: > > 0.00550 (29%) | 200 OK [http://ww > > w.example.com/invitations/new] > > REQUESTING PAGE: POST /invitations with {"commit"=>"Create", > > "invitation"=>{"cc"=>"", "text"=>"", "su > > bject"=>""}} > > > > > > Processing InvitationsController#create (for 127.0.0.1 at 2008-09-29 > > 08:55:04) [POST] > > Session ID: > > BAh7BiIKZmxhc2hJQzonQWN0aW9uQ29udHJvbGxlcjo6Rmxhc2g6OkZsYXNo% > > 0ASGFzaHsABjoKQHVzZWR7AA%3 > > D%3D--4a442a5c5f1558d51188e7e418677dedf9dd2717 > > Parameters: {"commit"=>"Create", "action"=>"create", > > "controller"=>"invitations", "invitation"=>{"c > > c"=>"", "text"=>"", "subject"=>""}} > > ESC[4;36;1mPK and serial sequence (0.005058)ESC[0m ESC[0;1m SELECT > > attr.attname, seq.relname > > FROM pg_class seq, > > pg_attribute attr, > > pg_depend dep, > > pg_namespace name, > > pg_constraint cons > > WHERE seq.oid = dep.objid > > AND seq.relkind = ''S'' > > AND attr.attrelid = dep.refobjid > > AND attr.attnum = dep.refobjsubid > > AND attr.attrelid = cons.conrelid > > AND attr.attnum = cons.conkey[1] > > AND cons.contype = ''p'' > > AND dep.refobjid = ''invitations''::regclass > > ESC[0m > > ESC[4;35;1mInvitation Create (0.001065)ESC[0m ESC[0mINSERT INTO > > invitations ("cc", "updated_at", > > "text", "subject", "created_at") VALUES(E'''', ''2008-09-29 > > 08:55:04.858034'', E'''', E'''', ''2008-09-29 08:55:04.858034'')ESC[0m > > ESC[4;36;1mSQL (0.000500)ESC[0m ESC[0;1mSELECT > > currval(''invitations_id_seq'')ESC[0m > > Redirected to http://www.example.com/invitations/1 > > Completed in 0.01049 (95 reqs/sec) | DB: 0.00662 (63%) | 302 Found > > [http://www.example.com/invitations] > > > > > > Willem > >> > >> Aslak > >> > >> > It might indicate, as Aslak says in the readme, it is recommended to > >> > create your features by hand. On the other hand, it would also be > >> > convenient if the combination of generate feature and generate > >> > rspec_scaffold works out of the box. :) > >> > > >> > I''m going to play a bit more with it - too early to send in my own fix > >> > for the feature generator I guess. I am willing to make it if you want > >> > it though. > >> > > >> > Willem > >> > > >> > _______________________________________________ > >> > rspec-users mailing list > >> > rspec-users at rubyforge.org > >> > http://rubyforge.org/mailman/listinfo/rspec-users > >> > > > > >