Test your RubyMotion app using screenshot comparison
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
app
lib chunky_png -> oily_png Feb 7, 2014
resources first commit Feb 4, 2014
sample all the things Feb 5, 2014
.gitignore all the things Feb 5, 2014
Gemfile
Gemfile.lock update dependencies Jul 16, 2014
LICENSE all the things Feb 5, 2014
README.md + image Feb 21, 2014
Rakefile all the things Feb 5, 2014
motion-screenspecs.gemspec update dependencies Jul 16, 2014
readme.png

README.md

motion-screenspecs

Test your RubyMotion app regressions using screenshot comparison (similar to Huxley and Wraith):

$ rake spec

AppScreenshots
  - should take screenshots

AppScreenshots.menu
  - should be <= 5.0% difference

AppScreenshots.timeline
  - should be <= 5.0% difference [FAILED - was 10.75%]

Bacon::Error: was 10.75%
    spec.rb:698:in `satisfy:': AppScreenshots.timeline - should be <= 5.0% difference
    spec.rb:438:in `execute_block'
    spec.rb:402:in `run_postponed_block:'
    spec.rb:397:in `resume'

3 specifications (3 requirements), 1 failures, 0 errors

exampke

(calculated diffs are truer than visual representation)

Installation

Add this line to your application's Gemfile:

gem 'motion-screenspecs'

And then execute:

$ bundle

Or install it yourself as:

$ gem install motion-screenspecs

Usage

motion-screenspecs works in unison with motion-screenshots. Here are the steps you need to get everything working:

  1. Create a subclass of Motion::Screenshots::Base (see the motion-screenshots README).

  2. Create the following directory structure:

    spec/
      screenshots/
        [YourScreenshotSubclass]
          expectations/
            [title of your screenshot].png
            [title of your other screenshot].png
            [etc].png
    

    The images in expectations are known values for your app. You can take these screenshots manually or using motion-screenshots' rake screenshots.

    Failing image diffs will be saved in spec/screenshots/[YourScreenshotSubclass]/failures. All results from the latest test are saved to spec/screenshots/[YourScreenshotSubclass]/results.

  3. Add a call to tests_screenshots in your specs:

    describe "Screenshots" do
      tests_screenshots AppScreenshots
    end

The sample app is a complete example with a failing test.

Hats off to Jeff Kreeftmeijer for the image diffing help!

Configuration

There's a couple of configuration options you can use:

Motion::Project::App.setup do |app|
  # Set your tolerance % for image differences
  Motion::Screenspecs.set_tolerance(5.0, app)

  # Set how long the tests will wait for your screenshots to finish
  Motion::Screenspecs.set_screenshot_timeout(120, app)

  # Set how long the tests will wait for a given image to finish diffing
  Motion::Screenspecs.set_diff_timeout(20, app)

  # Set whether or not your failed diffs will open in Finder upon finishing tests
  Motion::Screenspecs.open_failures_at_exit = true
end

rake spec

Contributing

  1. Fork it
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create new Pull Request

Contact

Clay Allsopp @clayallsopp