I have a rails 4 app. I have no tests at the moment, but when I created the app I didn't skip the default test unit so there are some empty test files (and other default settings) in my app.
Now I would like to use rspec + capybara, but don't know what the necessary extra steps are to properly install those and make sure the testing will work fine. I saw some answers on stackoverflow but thoose were pretty old.
As far as I know the installation looks like this if test unit is skipped on creation:
group :development, :test do
gem 'rspec-rails'
end
group :test do
gem 'capybara'
end
then
rails g rspec:install
Can sby tell me what the extra steps are?
Follow these steps:
add code to your_app/config/application.rb file:
config.generators do |g|
g.test_framework :rspec
end
add below code to your_app's Gemfile:
group :test, :development do
gem 'rspec-rails'
end
save it, and run bundle install to install rspec gem
Initialize the spec/ directory
rails generate rspec:install
Use the rspec command to run your specs:
bundle exec rspec
Hopefully it helps.
I am currently following this tutorial to begin testing rspec with capybara and selenium. I included the necessary gems and ran a bundle install, but cant seem to find the rails_helper.rb to continue with the tutorial.
This is on rails 4.2.4.
Thanks,
Otterman
rails_helper.rb in generated when you run rails g rspec:install. Make sure you are using a relatively recent version of rspec-rails as versions before 3.0 only the spec_helper.rb is used configure the test suite (well by default at least).
The spec_helper.rb file is used to set up RSpec itself and rails_helper.rb sets up the rails stack.
You should be able to find the file in ../spec/rails_helper
As mentioned, I was missing
group :development, :test do
gem 'rspec-rails', '~> 3.0'
end
in my gemfile.
After which I ran
rails generate rspec:install
I would be appreciated if you could help me in this problem:
I am using rails 3.2.11 and I have already installed
"gem installed scaffold"
I do not know why it is not working for me
main$ rails generate scaffold idea name:string description:text picture:string
It give me this error:
Usage: rails new APP_PATH [options]
generate command is for generating new code. scaffold is a type of generators, it is for generating models, controllers and views in existing application.
To create the project you have to use rails new APP_PATH [options].
The 'rails new' command creates a new Rails application with a default
directory structure and configuration at the path you specify.
This is my setup cheat sheet:
In the terminal run the following command:
rails new "app name" --database=postgresql --skip-test-unit
In the gem file add the following:
group :development, :test do
gem "rspec-rails"
gem "factory_girl_rails" `<- only put in test group, not dev`
gem "valid_attribute"
gem "shoulda-matchers"
gem "capybara"
gem "launchy"
gem "simple_form"
gem "pry-rails"
end
group :production do
gem 'rails_12factor'
end
Run ' bundle install ' to install the gems
rails generate rspec:install
rails generate simple_form:install
in spec_helper file require 'capybara/rails'
valid_attribute also needs --> require 'valid_attribute' in the spec_helper.rb file
capybara will need -> require 'spec_helper' in each of the test files in the directory /spec/features/filename_spec.rb
You should see a number of files and directories created for you. The most important of these is the spec directory.
Now you can create models: by tying the model generation process to the creation of the files and directories that RSpec wants, rspec-rails ensures that we have a testing environment that we need.
Add config/database.yml to /.gitignore file
I think you missed to get into your working folder before running the generate scaffold action.
cd "your_app" then run rails generate scaffold idea name:string description:text picture:string
I have a project which works well with rails default test suite Test::Unit and I have no reason to change the tests I have written. But when I write integration test with capybara, I found that capybara always work with rspec and I have some problem when using capybara with Test::Unit. So i decide to use rspec in Integration Test.
But here is the problem. After running rails g rspec:install the cmd rails g model will create test in spec, how can i use rspec for only integration test and use Test::Unit in other test.
Thanks in advance.
I assume you installed the rspec-rails gem. The gem configures Rails to use RSpec for testing. Generator are usually run in development, so by scoping rspec-rails to a :test group in your Gemfile, Rails should not load the gem in development.
group :test do
gem 'rspec-rails'
end
You could also overwrite the settings set by rspec-rails after the gem was loaded.
I'm trying to install RSpec as a gem after having it installed as a plugin. I've gone ahead and followed the directions found here http://github.com/dchelimsky/rspec-rails/wikis for the section titled rspec and rspec-rails gems. When I run ruby script/generate rspec, I get the error Couldn't find 'rspec' generator. Do only the plugins work? If so, why do they even offer the gems for rspec and rspec-rails? I'm running a frozen copy of Rails 2.1.2, and the version of rpsec and rspec-rails I'm using is the newest for today (Nov 7, 2008) 1.1.11.
EDIT Nov 12, 2008
I have both the rspec and rspec-rails gems installed. I've unpacked the gems into the vender/gems folder. Both are version 1.1.11.
Since RSpec has been become the default testing framework in Rails you no longer need to create spec docs via the rspec generators:
Rails 2 RSpec generator
rails generate rspec_model mymodel
Rails 3 RSpec generator
With RSpec as the default testing framework simply use Rails' own generators. This will construct all of the files you need including the RSpec tests. e.g.
$rails generate model mymodel
invoke active_record
create db/migrate/20110531144454_create_mymodels.rb
create app/models/mymodel.rb
invoke rspec
create spec/models/mymodel_spec.rb
Have you installed both rspec and rspec-rails gems?
script/generate rspec
requires rspec-rails gem to be installed.
For Rails 3 and rspec 2+
You must make sure you include 'rspec' and rspec-rails' in your Gemfile
Run Bundle Install
then run rails g rspec:install
If you are using rails 2.3 You need to use
ruby script/plugin install git://github.com/dchelimsky/rspec-rails.git -r 'refs/tags/1.3.3'
and then
ruby script/generate rspec
Is there supposed to be an 'rspec' generator? I've only used the following:
script/generate rspec_model mymodel
script/generate rspec_controller mycontroller
I've had this problem before, it boiled down to the version of RSpec I had not working with the version of Rails I was using. IIRC it was a 2.1 Rails and the updated RSpec hadn't been released as a gem. In fact, 1.1.11 is the gem I have, which would be the latest available (ignoring github gems), so I'm pretty sure that's exactly what my problem was.
I've taken to just using the head of master rspec with whatever version of Rails I happen to be on, it seems stable to me (and isn't going to break things in production, unless somehow a test broke with a false positive).
I do it with git using submodules, for example:
git submodule add git://github.com/dchelimsky/rspec.git vendor/plugins/rspec
git submodule add git://github.com/dchelimsky/rspec-rails.git vendor/plugins/rspec_on_rails
In case anyone is wondering about Rails 3 now,
this seems to do the trick for me:
http://github.com/rspec/rspec-rails/blob/29817932b99fc45adaa93c3f75d503c69aafcaef/README.markdown
I'm using rails 2.3.9. I started of trying to use the gem(s) but just couldn't get the generator for rspec to show up. Then I installed the plugin(s) using the instructions on https://github.com/dchelimsky/rspec/wiki/rails and that did the trick.
On Fedora 9 (OLPC) I did:
$ sudo gem install rspec
$ sudo gem install rspec-rails
Those got me to where I could run
$ ruby script/generate rspec
This worked for me, whereas the git instructions did not work.
If you are using bundler version 1.0.8 you should $ gem update bundler to a newer version 1.0.9.
I had the same symptons and updating bundler helped me out.
Now $ rails g is using gems defined in the Gemfile. Also I grouped my gems like this:
source 'http://rubygems.org'
gem 'rails', '3.0.3'
gem 'sqlite3-ruby', :require => 'sqlite3'
group :test, :development do
gem 'capybara', '0.4.1.1'
gem 'database_cleaner'
gem 'cucumber-rails'
gem 'rspec-rails', '~> 2.4'
gem 'launchy'
end
(Note that test gems are also in the :development group.)
Have a nice day :)
Lukas
If you type script/rails generate, the only RSpec generator you'll actually see is rspec:install. That's because RSpec is registered with Rails as the test framework, so whenever you generate application components like models, controllers, etc, RSpec specs are generated instead of Test::Unit tests.
Please note that the generators are there to help you get started, but they are no substitute for writing your own examples, and they are only guaranteed to work out of the box for the default scenario (ActiveRecord & Webrat).
https://github.com/rspec/rspec-rails
You might need to run bundle exec :
bundle exec rails g rspec:install
You'll need to do
sudo gem install cucumber-rails