I am in the process of creating an engine that will simplify adding single signon to my app using omniauth & devise. One of the requirements is testing this with Cucumber, and it took me a little while to figure this out, so I figured I would pass it on.

Add a test app on Facebook

The first thing you need to do is set up a test app on the Facebook developers site. This will allow you to use localhost as the callback url. Otherwise, FB API will not let you authenticate, b/c the FB App configuration URL will not match your app’s URL. You will probably want 3 different FB apps. One for dev, test, and prod using localhost:3000, locahost:3001 and yourprodurl.com.

In your test FB app settings, click the “Web Site” tab and make the Site URL = localhost:3001

Save your setttings.

Add mongrel to Gemfile

I added mongrel to my test environment instead of using webrick (b/c of issues with header size of google apps callback). I would recommend doing the same. Just add it to your gemfile under the dev and test groups. Here is my Gemfile (with a bunch of other testing gems included):

Make sure you run:

cowboycoded$  bundle install

Change Capybara server settings

Add these lines to “features/support/env.rb”:

You need to specify the port so mongrel is forced to start on 3001. You also need to specify the app_host as localhost, because the default “127.0.0.1″ was causing problems with FB API (url encoding I think)

Use Selenium in your scenarios

Preface your cucumber scenarios with @selenium, so you can navigate through external sites like Facebook

Of course you need to set up your cucumber step, based on how you are authenticating against facebook. I don’t provide the implementation details here. Just know that cuc is hitting the facebook URL in the first step of this scenario.

Run cucumber scenarios

cowboycoded$  bundle exec cucumber features/

You should be good to go now. Facebook will use the correct callback URL and your server will be running on the correct port to handle it.

Tags: , , ,