Why rails 4 tests does not reset db - ruby-on-rails

I'm using Ruby 2.3.0 and Rails 4.2.7.
I'm also using minitest ( ActionController::TestCase ) and these gems
gem 'capybara', '~>2.7.1'
gem 'poltergeist', '~>1.9.0'
gem 'minitest-rails-capybara', '~>2.1.2'
I was under the impression that everytime 'rake test' is called, the database is dropped and created with schema.rb (as it happens in all my other projects)
But with this project it doesn't do this (If i manually change something on the test db, it stay that way between test)
Is this normal? What could be the cause?

No, Rails (or RSpec or Minitest) doesn't drop the database before running tests.
Perhaps you used a gem like database_cleaner in the other projects before?

Related

Bootstrap Devise Cancan Rails - Rspec Failure

I just installed Rails3 Bootstrap Device Cancan in my local machine and ran rake spec but I'm getting all test failures with below error in common:
undefined local variable or method 'postgresql_version' for #<ActiveRecord::ConnectionAdaptors::SQLite3Adaptor:0x489dff8>
I'm not sure why I'm getting this since I followed the instructions on https://github.com/RailsApps/rails3-bootstrap-devise-cancan carefully.
I'm currently running this on Windows 8 and used Bitnami RubyStack to run CMD
I ran into the same problem and this is how I resolved it.
It looks like there is a problem with version 1.1.0 of database_cleaner. See "database_cleaner >= 1.1.0 is broken for SQLite" (https://github.com/gregbell/active_admin/issues/2388). I updated my Gemfile to set
gem 'database_cleaner', '< 1.1.0'
then ran "bundle install" and after it completed, "rake spec" ran cleanly.
Double-check your database.yml. Refer to Configuring Rails Applications, Section 3.12, Configuring a Database.
Did you intend to use sqlite3? Is sqlite3 in your Gemfile? Naturally, SQLite3Adaptor will not respond to postgresql_version! Can you include a few more lines of the stack trace?
I doubt this has anything to do with devise or cancan.

Use rspec only in integration tests

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.

Using the turn gem with Test::Unit

I'm using Turn gem in a rails app to colourise my Test::Unit output, and I find the following output before any of my tests run:
stephen#x5:~/code/ruby$ rake test
gem install minitest
gem install minitest
... tests seem to run just fine, and are nicely coloured
This happens everytime I run them. What is the deal here? Am I supposed to be using minitest instead of Test::Unit?
What is the best way to colourise Test::Unit output? Just looking for red and green.
gem 'redgreen' worked great for me (on Ruby 1.9.2 and Rails 3.0.7) with Test::Unit.
Add the above to your Gemfile.
On RubyGems.

How can I get Capybara #javascript tags executing correctly in Cucumber on a Rails 3 project?

I've swapped out Webrat for Capybara on a new Rails 3 project. I ran through Tim Riley's great post on it here ( http://openmonkey.com/articles/2010/04/javascript-testing-with-cucumber-capybara ), and also cloned his repository, executed the example cucumber feature, and saw the browser window fire open. So the whole Cucumber, Capybara, Selenium stack seems to work fine in that instance.
However if I create a new Rails 3 project, run through setting up a similar example project, and annotate a Scenario with #javascript the browser window does not fire, and the Cucumber Scenario just fails with the usual Command failed with status (1) event (which, in the instance of failing or pending steps, Cucumber triggers by design for the benefit of CI tools).
Apart from the #javascript functionality provided by Capybara, all other features work fine.
Am I missing something incredibly obvious? Is there a way for a BDD newcomer to look deeper into the issues (the stack trace just shows the standard rake error when Cucumber fails).
rvm 1.9.2-head
gem 'rails', '3.0.0.rc'
gem 'cucumber'
gem 'cucumber-rails'
gem 'capybara'
gem 'culerity'
gem 'celerity', :require => nil
The issue is actually with cucumber-rails and a missing dependency on DatabaseCleaner: http://github.com/aslakhellesoy/cucumber-rails/issues#issue/36
The issue is manifested when adding a #javascript tag to a cucumber feature. By default the cucumber options suppress the warnings that would have alerted me to the fact. By updating config/cucumber.yml to:
std_opts = "--format #{ENV['CUCUMBER_FORMAT'] || 'pretty'} --strict --tags ~#wip"
the error is shown when running cucumber: uninitialized constant DatabaseCleaner (NameError)
The quick fix in this case is to add gem 'database_cleaner' to the project's Gemfile.
Capybara is "lazy" in that it will open the browser window first when it is actually needed. If you're actually doing something that would require a browser, Capybara won't open one.
Maybe you have not installed the mongrel gem. The browser automation is somehow not working with webrick and i have experienced the same silent failing the you describe here.
Adding
gem 'mongrel', '>= 1.2.0.beta.1'
to my Gemfile solved it.
I made an example app on how to configure that: github.com/lailsonbm/contact_manager_app/

Couldn't find 'rspec' generator

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

Resources