How to 'rake spec' one directory, e.g. models? - ruby-on-rails

I can rake spec and all specs run.
However trying to run specs for one directory, as in
rake spec/models/ or rake spec/models/*.rb
does not provide any output or errors.
One option is that I can do
rspec spec/models/*.rb
or
rspec spec/models/
but I was wondering if I could stay within Rake.

Try rake spec:models instead of rake spec/models. Run rake -T | grep spec to see all the available rake spec tasks.
UPDATE: Running your specs through rake spec may be slower than running them through rspec spec, said by the rspec-rails guys. Read de installation section of rspec-rails.

Use SPEC env. variable:
rake spec SPEC=spec/models

Related

How to run only controller tests in MiniTest?

What is the rake command for running only controller tests in minitest?
rake test:controller doesn't do the trick.
Try making it plural. This is the typical command:
rake test:controllers
http://guides.rubyonrails.org/testing.html#rake-tasks-for-running-your-tests
Section 6 covers the rake commands for testing.
Has to be plural rake test:controllers as you're running all of them.
Please take a look at http://guides.rubyonrails.org/testing.html#rake-tasks-for-running-your-tests for more rake commands.
If you want to run a specific file, then use the TEST argument:
rake test TEST=test/controllers/application_controller_test.rb
As an update:
rails test path/to/test/file.rb has become my go-to solution.
rails test path/to/test/file.rb:123 lets you pick the test via line number as well.

Rails - How can I run cucumber tests only?

I can run all models with rake:models
Any option to do that that for cucumber tests instead of just rake and running all tests at all levels?
I tried:
$ rake spec:cucumber
rake aborted!
Don't know how to build task 'spec:cucumber'
You should be able to just run rake cucumber
A quick output of rake -T shows:
rake cucumber # Alias for cucumber:ok
rake cucumber:all # Run all features
rake cucumber:ok # Run features that should pass
rake cucumber:rerun # Record failing features and run only them if any exist
rake cucumber:wip # Run features that are being worked on

Rails - rspec - How can I run all the integration tests, similar to rake spec:models

The following commands work:
rake spec:models
rake spec:controllers
rake spec:requests
but the following does not:
rake spec:integration
rake spec:integrations
How can I run all the integration tests alone?
One option is to use rspec spec/integration/* I guess.
I was hoping for an answer that worked with rake like the other methods.
Actually, request specs are integration tests in rspec. Were some of the tests inherited from test::unit?
Test::Unit is the default test library for a new rails application created using the generator (unless -T is specified which skips the creation of test::unit files), so it will come with spec/integration, whereas for Rspec, the convention is to use spec/requests. In fact if you try to generate a new integration_test now by rails g integration_test testname, that will go into requests.

RSpec > Is there a way to run all tests with one command?

Is there a command that does this? I've searched but can not find anything
Try this in your terminal window:
bundle exec rspec spec
if you are using rspec-rails then you can run using rake spec
if you're testing models, use rake spec:models (or rake spec:routing or rake spec:controllers)
if just testing one model, use rake SPEC=app/models/modelname.rb
Create a .rspec file in the root of your project
Add the path to where your specs are e.g.
--default-path test/spec/
Add the pattern of how your files are named e.g.
--pattern ****/*.spec
Run rspec and it should pick all your specs and run them :)
default-path and pattern are simply command line arguments, which means you can also add any other command line argument that rspec takes (can run rspec --help to see the available options)
According to https://www.relishapp.com/rspec/rspec-core/v/2-0/docs/configuration/read-command-line-configuration-options-from-files you can also put the options in ~/.rspec, which will make the options available globally. Local .rspec file options will override the global options.
For controller test
bundle exec rake spec:controllers
For model test
bundle exec rake spec:models
For all test
bundle exec rake spec
For specific file test do
rspec file_name_spec.rb (example rspec spec/controllers/groups_controller_spec.rb)
go to your app directory and run rspec spec or bundle exec rspec spec.
use spork to speed your testing...(i kinda say its compulsory)

How to build task 'gems:install'

I am deploying my rails app to a linux server and i have some of the rake tasks missing inlcuding rake gems:install and rake db
I am running rails 2.3.4 from GEM.
Why is this?
How do I fix this? can I update somehow?
they are missing from rake -T list
rake apache2 # Build Apache 2 module
rake clean # Remove compiled files
rake clobber # Remove all generated files
rake default # Build everything
rake doc # Generate all documentation
rake doxygen # Generate Doxygen C++ API documentation if ...
rake doxygen:clobber # Remove generated Doxygen C++ API documenta...
rake doxygen:force # Force generation of Doxygen C++ API docume...
rake fakeroot # Create a fakeroot, useful for building nat...
rake nginx # Build Nginx helper server
rake package # Build all the packages
rake package:clean # Remove package products
rake package:debian # Create a Debian package
rake package:force # Force a rebuild of the package files
rake package:gem # Build the gem file passenger-2.2.4.gem
rake rdoc # Build the rdoc HTML Files
rake rdoc:clobber # Remove rdoc products
rake rdoc:force # Force a rebuild of the RDOC files
rake sloccount # Run 'sloccount' to see how much code Passe...
rake test # Run all unit tests and integration tests
rake test:cxx # Run unit tests for the Apache 2 and Nginx ...
rake test:integration # Run all integration tests
rake test:integration:apache2 # Run Apache 2 integration tests
rake test:integration:nginx # Run Nginx integration tests
rake test:oxt # Run unit tests for the OXT library
rake test:rcov # Run coverage tests for the Ruby libraries
rake test:restart # Run the 'restart' integration test infinit...
rake test:ruby # Run unit tests for the Ruby libraries
my rake file contains this:
# Add your own tasks in files placed in lib/tasks ending in .rake,
# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
require(File.join(File.dirname(__FILE__), 'config', 'boot'))
require 'rake'
require 'rake/testtask'
require 'rake/rdoctask'
require 'tasks/rails'
How do I add the gems and db rake tasks? and why are they missing?
What is the output of rake -T? This should list all avaiable tasks. In a RoR application, the Rakefile defines your tasks.
You can update gems using gem update.
Check your Capfile, if you are in fact running the gems:install from Capistrano. Apparently, the way to do this is to ensure you're in the right directory internally when running Capistrano.
namespace :gems do
desc "Install gems"
task :install, :roles => :app do
run "cd #{current_path} && #{sudo} rake RAILS_ENV=production gems:install"
end
end
You could also always specify the Rakefile to be sure using the -f [FILE] option in front of the rake command.
You could try updating your Rails install, or reinstalling rails altogether by passing the --force flag. Do you have any other projects for which this command works? Check the rake files from those projects. It looks like your rakefile is the same as mine though... Is this project originally based on an older version of rails? What Gem version are you running? You might need to do a gem update --system. All these are possibilities.
I suppose you could always recreate your project. Annoying but always seems to help worst case scenario.
At least that'll give you an idea of whether or not it's the project or something in some kind of dependencies issue.
If you are using a rails app, you also have rake tasks defined in lib/tasks/SOME_TASK.rake
if you define the SOME_TASK it will then show up when you run rake -T and be an available command.

Resources