Blog
-
May 1, 2010 @ 11:48pm
Testing AJAX with Cucumber and Capybara
For a recent project, I used Cucumber and Capybara for my user stories. When I decided to AJAXify the functionality, I wrote some stories tagged with @javascript that were nearly identical to my non-javascript versions (non-JS and JS). Since the changes to the page content should be the same with or without Javascript, testing the page content wouldn't actually verify that the AJAX funtionality was working. To solve this, I created the step "Then the page should not change" with the following definition:
Then 'the page should not change again' do evaluate_script('window.onunload = window.stop') endNow, if the user clicks a link that doesn't have its behavior overwritten by Javascript, a blank page will be displayed and any following steps will fail.
-
January 29, 2010 @ 7:47am
Early Returns for Clarity's Sake
I don't like to nitpick about programming style, but there is one thing that always bugs me. I frequently come across functions structured as follows:
function foo() { if (a) { // do stuff } else { return false; } }I always wonder why the programmer didn't use an early return:
function foo() { if (!a) return false; // do stuff }Continued...
-
October 28, 2009 @ 5:41pm
Analogy for Net Neutrality
ISPs are like UPS or Fedex to the web. They deliver packets from sender to receiver. With net neutrality, they must place equal priority on each delivery and deliver the packets untampered. Without, they may open, inspect, modify, delay, or even halt packets of their choice.
-
May 25, 2009 @ 10:13am
Using a Float Column in a Where Clause
I spent about 12 hours today trying to figure out why one of my
validates_uniqueness_ofconstraints was not working. Here's why:mysql> create table some_table (some_float_column float); Query OK, 0 rows affected (0.01 sec) mysql> insert into some_table (some_float_column) values (8.4537); Query OK, 1 row affected (0.00 sec) mysql> select * from some_table where some_float_column = 8.4537; Empty set (0.01 sec)Notice how I'd just inserted a row with that value yet the row was not returned. All I had to do was change the float column to a decimal column.
-
March 22, 2009 @ 6:22pm
Auto-Start Juggernaut with Cucumber
If you use Juggernaut and Cucumber, many of your features can fail unless you have a Juggernaut server running. You can add the following to your features/support/env.rb to automatically start and stop Juggernaut when you run your features:
juggernaut = fork { exec 'juggernaut -c config/juggernaut.yml' } at_exit { exec 'kill', juggernaut.to_s }