2
votes

I am trying to setup the integration of Calabash-iOS using rspec (& not the cucumber) by following the steps mentioned in http://devblog.snap-interactive.com/post/45933948225/mobile-automation-of-ios-native-apps-with-calabash-ios#.Ue6PORz5BhF but unable to proceed. I’ve listed in detail the steps I followed and the debug errors too. Please share some light as what is going wrong.. I am new to ruby and to calabash too.

Steps: I created XCodeproject and configured the project following the steps mentioned in https://github.com/calabash/calabash-ios, In the Terminal cd to the Project Directory and installed rspec gem, did rspec –init to create the spec_helper

I am using Rubymine.

The tree structure that exists as:

TestProject

  • calabash.framework
  • features
    • step_definitions
    • support
      • 01_launch.rb –I moved this file under lib directory and renamed to launch.rb which I referenced in the spec_helper.rb
      • ..other files
  • lib
    • launch.rb
    • MySpec.rb
  • spec
    • MySpec_spec.rb
    • spec_helper.rb
  • other Project folders…..

Is there a specific format that should be followed while working with rspec that I'm missing here? (like we have for cucumber features folder, step_definitions,etc..)

I am posting the contents of my files:

launch.rb

########################################
#                                      #
#       Important Note                 #
#                                      #
#   When running calabash-ios tests at #
#   www.xamarin.com/test-cloud         #
#   this file will be overwritten by   #
#   a file which automates             #
#   app launch on devices.             #
#                                      #
#   Don't rely on this file being      #
#   present when running at            #
#   Xamarin Test Cloud                 #
#                                      #
########################################

require 'calabash-cucumber/launcher'

APP_BUNDLE_PATH = "~/Library/Developer/Xcode/DerivedData/MyApp-dftlalczpovmeddcybgllunvwpoe/Build/Products/Release-iphonesimulator/MyApp.app" 


Before do |scenario|
  @calabash_launcher = Calabash::Cucumber::Launcher.new
  unless @calabash_launcher.calabash_no_launch?
    @calabash_launcher.relaunch
    @calabash_launcher.calabash_notify(self)
  end
end

After do |scenario|
  unless @calabash_launcher.calabash_no_stop?
    calabash_exit
    @calabash_launcher.stop
  end
end

at_exit do
  launcher = Calabash::Cucumber::Launcher.new
  if launcher.simulator_target?
    Calabash::Cucumber::SimulatorHelper.stop unless launcher.calabash_no_stop?
  end
end

> Is this correct to add APP_BUNDLE_PATH like this?

> Do I need to add APP_BUNDLE_PATH here if I've the source code of the application or only when I've the .app"

On Debugging launch.rb, I get the following Errors, can someone please help resolve this:

/Users/qateam/.rbenv/versions/2.0.0-p247/bin/ruby -e $stdout.sync=true;$stderr.sync=true;load($0=ARGV.shift) /Users/qateam/Desktop/library_project/TestProject/lib/launch.rb
/Users/qateam/Desktop/library_project/TestProject/lib/launch.rb:30:in `<top (required)>': undefined method `Before' for main:Object (NoMethodError)
    from -e:1:in `load'
    from -e:1:in `<main>'

Process finished with exit code 1

spec_helper.rb

require_relative '../lib/launch'
require ‘rspec’

require ‘rubygems’
require 'calabash-cucumber/core'
require 'calabash-cucumber/tests_helpers'
require 'calabash-cucumber/keyboard_helpers'
require 'calabash-cucumber/wait_helpers'
require 'calabash-cucumber/operations'
require 'calabash-cucumber/version'
require 'calabash-cucumber/location'
require 'calabash-cucumber/ibase'
include Calabash::Cucumber::Core
include Calabash::Cucumber::WaitHelpers
include Calabash::Cucumber::TestsHelpers
include Calabash::Cucumber::Operations

# This file was generated by the `rspec --init` command. Conventionally, all
# specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
# Require this file using `require "spec_helper"` to ensure that it is only
# loaded once.
#
# See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
RSpec.configure do |config|
  config.treat_symbols_as_metadata_keys_with_true_values = true
  config.run_all_when_everything_filtered = true
  config.filter_run :focus

  # Run specs in random order to surface order dependencies. If you find an
  # order dependency and want to debug it, you can fix the order by providing
  # the seed, which is printed after each run.
  #     --seed 1234
  config.order = 'random'
end

Please note:

the line "require ‘rspec’" line says "No such file to load", why so? I did install rspec gem in the project directory

On Debugging spec_helper.rb, I get the following Errors:

/Users/qateam/.rbenv/versions/2.0.0-p247/bin/ruby -e $stdout.sync=true;$stderr.sync=true;load($0=ARGV.shift) /Users/qateam/Desktop/library_project/TestProject/spec/spec_helper.rb
/Users/qateam/Desktop/library_project/TestProject/lib/launch.rb:30:in `<top (required)>': undefined method `Before' for main:Object (NoMethodError)
    from /Users/qateam/Desktop/library_project/TestProject/spec/spec_helper.rb:1:in `require_relative'
    from /Users/qateam/Desktop/library_project/TestProject/spec/spec_helper.rb:1:in `<top (required)>'
    from -e:1:in `load'
    from -e:1:in `<main>'

Process finished with exit code 1

Please guide on what is going wrong.

MySpec_spec.rb

require ‘spec_helper’
.
.
.
.

On doing "rspec spec" in Terminal results in following:

/Users/qateam/Desktop/library_project/TestProject/spec/launch.rb:17:in <top (required)>': undefined methodBefore' for main:Object (NoMethodError) from /Users/qateam/Desktop/library_project/TestProject/spec/spec_helper.rb:1:in require_relative' from /Users/qateam/Desktop/library_project/TestProject/spec/spec_helper.rb:1:in' from /Users/qateam/.rbenv/versions/2.0.0-p247/lib/ruby/site_ruby/2.0.0/rubygems/core_ext/kernel_require.rb:51:in require' from /Users/qateam/.rbenv/versions/2.0.0-p247/lib/ruby/site_ruby/2.0.0/rubygems/core_ext/kernel_require.rb:51:inrequire' from /Users/qateam/Desktop/library_project/TestProject/spec/PlayWithShopwise_spec.rb:1:in <top (required)>' from /Users/qateam/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/rspec-core-2.14.4/lib/rspec/core/configuration.rb:896:inload' from /Users/qateam/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/rspec-core-2.14.4/lib/rspec/core/configuration.rb:896:in block in load_spec_files' from /Users/qateam/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/rspec-core-2.14.4/lib/rspec/core/configuration.rb:896:ineach' from /Users/qateam/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/rspec-core-2.14.4/lib/rspec/core/configuration.rb:896:in load_spec_files' from /Users/qateam/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/rspec-core-2.14.4/lib/rspec/core/command_line.rb:22:inrun' from /Users/qateam/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/rspec-core-2.14.4/lib/rspec/core/runner.rb:80:in run' from /Users/qateam/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/rspec-core-2.14.4/lib/rspec/core/runner.rb:17:inblock in autorun'

Appreciate any inputs on this..

If you have any working example of calabash-rspec, or any documentation/tutorials, please share.

Thanks,

1
Hi can you try this change. re name your step file as yourPrefix_steps.rb and try again. "filename.._steps.rb"Chathura Palihakkara
Hi Chathura, thanks for replying. I am not using Cucumber (& thus no step_definitions folder and hence _steps.rb files in my project). I am trying my hands on rspec. Not sure why am I getting "launch.rb:30:in <top (required)>': undefined method Before' for main:Object (NoMethodError)" this error on debugging..user2525211

1 Answers

0
votes

I realize this is an ancient post, but we've been using rspec for unit and integration testing the Calabash iOS and run-loop gems. It is 100% possible to use rspec as your test running, but you'll need to configure the runner yourself. My best advice is to use a before(:all) block to launch the app.