Question

I have a simple rails app which Im trying to introduce elementary tests in. Im following this url.

My application is structured as follows:

enter image description here

Im trying to test the single page: called Main Page.

In spec/features/main_pages_spec.rb I have the following code:

 require 'spec_helper'

feature "soadevise" do
  feature "Main Page" do
scenario "should have the content 'Main Page' "
    visit '/main_page/home'
  expect(page).to have_content('Main Page')
   end
end

My spec/spec_helper.rb looks like this:

 # This file is copied to spec/ when you run 'rails generate rspec:install'
 ENV["RAILS_ENV"] ||= 'test'
 require File.expand_path("../../config/environment", __FILE__)
 require 'rspec/rails'
 require 'rspec/autorun'

 # Requires supporting ruby files with custom matchers and macros, etc,
 # in spec/support/ and its subdirectories.
 Dir[Rails.root.join("spec/support/**/*.rb")].each { |f| require f }

 # Checks for pending migrations before tests are run.
 # If you are not using ActiveRecord, you can remove this line.
 ActiveRecord::Migration.check_pending! if defined?(ActiveRecord::Migration)

 RSpec.configure do |config|
   # ## Mock Framework
   #
   # If you prefer to use mocha, flexmock or RR, uncomment the appropriate line:
   #
   # config.mock_with :mocha
   # config.mock_with :flexmock
   # config.mock_with :rr
   config.include Capybara::DSL
   # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures
   config.fixture_path = "#{::Rails.root}/spec/fixtures"

   # If you're not using ActiveRecord, or you'd prefer not to run each of your
   # examples within a transaction, remove the following line or assign false
   # instead of true.
   config.use_transactional_fixtures = true

   # If true, the base class of anonymous controllers will be inferred
   # automatically. This will be the default behavior in future versions of
   # rspec-rails.
   config.infer_base_class_for_anonymous_controllers = false

   # 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

When I run this command in the terminal:

  MRMIOMP0903:soadevise $ bundle exec rspec spec/features/main_pages_spec.rb

I get the following error:

 /Users/am/Desktop/x/xx/rails_projects/mysql_apps/soadevise/
  spec/features/main_pages_spec.rb:6:
  in `block (2 levels) in <top (required)>': undefined method `visit' for #  
  <Class:0x007fb7237377b0> (NoMethodError)

  from /Users/am/.rvm/gems/ruby-2.0.0-p247/gems/rspec-core 2.14.7/lib/rspec/core/example_group.rb:246:in `module_eval'

  from /Users/am.rvm/gems/ruby-2.0.0-p247/gems/rspec-core-2.14.7/lib/rspec/core/example_group.rb:246:in `subclass'

   from /Users/am.rvm/gems/ruby-2.0.0-p247/gems/rspec-core-2.14.7/lib/rspec/core/example_group.rb:232:in `describe'

My gemfile contains these:

 #For testing
 group :development, :test do
   gem "rspec-rails", "~> 2.14.1"
 end

 group :test do 
  gem "selenium-webdriver"
  gem "capybara"
 end

I refered to this link as well. Can someone suggest what Im doing wrong?

Was it helpful?

Solution

You're calling feature twice. It should look like this:

require 'spec_helper'

    feature "soadevise Main Page" do
      scenario "should have the content 'Main Page'" do
         visit '/main_page/home'
         expect(page).to have_content('Main Page')
       end
    end
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top