Rake test:unit gives Command failed with status (1):

I am trying to run rake test:unit on an app I have made. This is what
happens

neil@neil-laptop:~/************$ rake test:units --trace
(in /home/neil/************)
** Invoke test:units (first_time)
** Invoke db:test:prepare (first_time)
** Invoke db:abort_if_pending_migrations (first_time)
** Invoke environment (first_time)
** Execute environment
** Execute db:abort_if_pending_migrations
** Execute db:test:prepare
** Invoke db:test:load (first_time)
** Invoke db:test:purge (first_time)
** Invoke environment
** Execute db:test:purge
** Execute db:test:load
** Invoke db:schema:load (first_time)
** Invoke environment
** Execute db:schema:load
** Execute test:units
/usr/bin/ruby1.8 -I"lib:test"
“/home/neil/.gem/ruby/1.8/gems/rake-0.8.7/lib/rake/rake_test_loader.rb”
“test/unit/story_test.rb” “test/unit/user_mailer_test.rb”
“test/unit/user_test.rb” “test/unit/helpers/community_helper_test.rb”
“test/unit/helpers/friendship_helper_test.rb”
“test/unit/helpers/profile_helper_test.rb” “test/unit/comment_test.rb”
“test/unit/friendship_test.rb”
ruby index.rb
rake aborted!
Command failed with status (1): [/usr/bin/ruby1.8 -I"lib:test"
"/home/neil/…]

Any ideas?

I’m still stuck, can’t make an tests work

I have created a test application. It only has one model. When I run
tests on it it runs but still comes up with the same error message ie

  1. Failure:
    test_should_not_be_valid_without_story(AnnnetteTest)
    [./test/unit/annnette_test.rb:6:in
    test_should_not_be_valid_without_story' /home/neil/annnette/vendor/rails/activesupport/lib/active_support/testing/setup_and_teardown.rb:94:insend
    /home/neil/annnette/vendor/rails/activesupport/lib/active_support/testing/setup_and_teardown.rb:94:in
    `run’]:
    is not true.

1 tests, 1 assertions, 1 failures, 0 errors
rake aborted!
Command failed with status (1): [/usr/bin/ruby1.8 -I"lib:test"
"/usr/lib/ru…]

Any ideas?

On 20 November 2010 11:08, Neil B. [email protected] wrote:

I have created a test application. It only has one model. When I run
tests on it it runs but still comes up with the same error message ie

  1. Failure:
    test_should_not_be_valid_without_story(AnnnetteTest)

So your test is failing. Either you have written the test incorrectly
or your application is not right. If you do not understand why the
test is failing show us the code of the test and we may be able to
help.

[./test/unit/annnette_test.rb:6:in

That is the line in your test where it is failing

`test_should_not_be_valid_without_story’

/home/neil/annnette/vendor/rails/activesupport/lib/active_support/testing/setup_and_teardown.rb:94:in

`send

/home/neil/annnette/vendor/rails/activesupport/lib/active_support/testing/setup_and_teardown.rb:94:in

`run’]:
is not true.

You have a test for something true, but it is actually nil.

Colin

This is the test, it looks OK to me.
require ‘test_helper’

class AnnnetteTest < ActiveSupport::TestCase
def test_should_not_be_valid_without_story
a = Annnette.create(:story => ‘Neil’)
assert a.errors.on(:story)
end

end

Gleble

On 20 November 2010 11:56, Neil B. [email protected] wrote:

Please don’t top post, it makes it difficult to follow the thread.
Insert your comments at appropriate point in previous message.
Thanks.

This is the test, it looks OK to me.
require ‘test_helper’

class AnnnetteTest < ActiveSupport::TestCase
def test_should_not_be_valid_without_story
a = Annnette.create(:story => ‘Neil’)
assert a.errors.on(:story)

So what can you deduce from this? The test says a.errors.on(:story)
should be true. When you run the test it says it is nil. Your app is
allowing the create without generating errors. However the test looks
a bit odd. The name suggests that you are checking that you cannot
create an Annnette without a story, yet you appear to be giving it one
(‘Neil’).

Colin

Colin L. wrote in post #962761:

On 20 November 2010 11:56, Neil B. [email protected] wrote:

Please don’t top post, it makes it difficult to follow the thread.
Insert your comments at appropriate point in previous message.
Thanks.

This is the test, it looks OK to me.
require ‘test_helper’

class AnnnetteTest < ActiveSupport::TestCase
def test_should_not_be_valid_without_story
a = Annnette.create(:story => ‘Neil’)
assert a.errors.on(:story)

So what can you deduce from this? The test says a.errors.on(:story)
should be true. When you run the test it says it is nil. Your app is
allowing the create without generating errors. However the test looks
a bit odd. The name suggests that you are checking that you cannot
create an Annnette without a story, yet you appear to be giving it one
(‘Neil’).

Colin

So I change line 6 to

a = Annnette.create(:story => nil)

and I still get

  1. Failure:
    test_should_not_be_valid_without_story(AnnnetteTest)
    [./test/unit/annnette_test.rb:6:in
    `test_should_not_be_valid_without_story’
    /home/neil/annnette/vendor/rails/activesupport/lib/active_support/testing/setup_and_teardown.rb:94:in
    `send
    /home/neil/annnette/vendor/rails/activesupport/lib/active_support/testing/setup_and_teardown.rb:94:in
    `run’]:
    is not true.

1 tests, 1 assertions, 1 failures, 0 errors
rake aborted!
Command failed with status (1): [/usr/bin/ruby1.8 -I"lib:test"
"/usr/lib/ru…]

Colin L. wrote in post #962765:

On 20 November 2010 12:28, Neil B. [email protected] wrote:

class AnnnetteTest < ActiveSupport::TestCase

[./test/unit/annnette_test.rb:6:in
`test_should_not_be_valid_without_story’

/home/neil/annnette/vendor/rails/activesupport/lib/active_support/testing/setup_and_teardown.rb:94:in

`send

/home/neil/annnette/vendor/rails/activesupport/lib/active_support/testing/setup_and_teardown.rb:94:in

`run’]:
is not true.

You will have to look at the code of the app and work out why.

Presumably somewhere in your code you have attempted to prevent the
creation without a story.

If you cannot see what is wrong with that code (the code that prevents
the creation without a story) then you could look at the Rails Guide
on debugging to help you to find out what is going on.

Colin

Presumably somewhere in your code you have attempted to prevent the
creation without a story.

That can’t be so because this works

neil@baby6:~/annnette$ script/console
Loading development environment (Rails 2.2.3)

a = Annnette.create(:story => ‘neil’)
=> #<Annnette id: 3, story: “neil”, created_at: “2010-11-20 12:58:11”,
updated_at: “2010-11-20 12:58:11”>

On 20 November 2010 12:28, Neil B. [email protected] wrote:

class AnnnetteTest < ActiveSupport::TestCase

[./test/unit/annnette_test.rb:6:in
`test_should_not_be_valid_without_story’

/home/neil/annnette/vendor/rails/activesupport/lib/active_support/testing/setup_and_teardown.rb:94:in

`send

/home/neil/annnette/vendor/rails/activesupport/lib/active_support/testing/setup_and_teardown.rb:94:in

`run’]:
is not true.

You will have to look at the code of the app and work out why.

Presumably somewhere in your code you have attempted to prevent the
creation without a story.

If you cannot see what is wrong with that code (the code that prevents
the creation without a story) then you could look at the Rails Guide
on debugging to help you to find out what is going on.

Colin

On 20 November 2010 12:28, Neil B. [email protected] wrote:

  1. Failure:
    is not true.

You should possibly not be using .create as that does a save at that
point. The save will fail (because there’s no story) and “a” won’t be
assigned anything.

instead, try:
a = Annnette.new(:story => nil)

Or load a valid Annnette from your fixtures (or factories), set the
story to nil, and check the errors.

On 20 November 2010 13:00, Neil B. [email protected] wrote:

=> #<Annnette id: 3, story: “neil”, created_at: “2010-11-20 12:58:11”,
updated_at: “2010-11-20 12:58:11”>

I am losing track of this conversation. I think we had better start
again. Can you explain:

  1. What the test you wrote is attempting to check.
  2. What code you have written in the application to perform the
    operation that the test is checking.

Colin

Colin L. wrote in post #962775:

On 20 November 2010 13:00, Neil B. [email protected] wrote:

=> #<Annnette id: 3, story: “neil”, created_at: “2010-11-20 12:58:11”,
updated_at: “2010-11-20 12:58:11”>

I am losing track of this conversation. I think we had better start
again. Can you explain:

  1. What the test you wrote is attempting to check.
  2. What code you have written in the application to perform the
    operation that the test is checking.

Colin

1.It should show an error if an attempt is made to create a story
without a story entry.
2.This is from annnettes_controller.rb

def create
@annnette = Annnette.new(params[:annnette])

respond_to do |format|
  if @annnette.save
    flash[:notice] = 'Annnette was successfully created.'
    format.html { redirect_to(@annnette) }
    format.xml  { render :xml => @annnette, :status => :created, 

:location => @annnette }
else
format.html { render :action => “new” }
format.xml { render :xml => @annnette.errors, :status =>
:unprocessable_entity }
end
end
end

It is a very simple app made with scaffold to try and understand the
problems with my main app which started this thread.

On 20 November 2010 13:47, Neil B. [email protected] wrote:

1.It should show an error if an attempt is made to create a story
without a story entry.
2.This is from annnettes_controller.rb

But you’re testing a Model… so the controller code is not very
useful to help with what’s going on :-/

On 20 November 2010 13:47, Neil B. [email protected] wrote:

if @annnette.save
end
I don’t see anything there stopping a save if there is no story.
Anyway this code is not called when you call Annnette.create, the
create method of the model is called. As Michael has pointed out you
probably want to use new rather than create in the test, but you still
need code to stop the save if there is no story. Usually this would
be done by a validation in the controller.

Colin

Michael P. wrote in post #962781:

On 20 November 2010 13:47, Neil B. [email protected] wrote:

1.It should show an error if an attempt is made to create a story
without a story entry.
2.This is from annnettes_controller.rb

But you’re testing a Model… so the controller code is not very
useful to help with what’s going on :-/

There is no code in models/annnette.rb

I would be happy if any test worked

On 20 November 2010 14:49, Neil B. [email protected] wrote:

Michael P. wrote in post #962781:

But you’re testing a Model… so the controller code is not very
useful to help with what’s going on :-/

There is no code in models/annette.rb

no “validates_presence_of :annnette”?

I would be happy if any test worked

If you’re writing code to validate db updates in your controller, and
trying to test them with unit tests, I suggest you take a couple of
steps back, buy and read the “Agile Web D. With Rails” book,
and move forward from there.

Regards,

On 20 November 2010 14:49, Neil B. [email protected] wrote:

I would be happy if any test worked

If you just want a test that works then change your existing test to
one that checks that you can create an object if you do provide a
story, use new instead of create and change the assert to assert_nil,
something like

class AnnnetteTest < ActiveSupport::TestCase
def test_should_be_valid_with_story
a = Annnette.new(:story => ‘Neil’)
assert_nil a.errors.on(:story)
end

Colin

On 20 November 2010 16:07, Neil B. [email protected] wrote:

OK that worked so I changed the test in my other app (the one that
matters) to

class StoryTest < ActiveSupport::TestCase
def test_should_be_valid_with_author
s = Story.create(:author => ‘neil’, :title => ‘Story’, :body =>
‘test’)

What is that create doing there?

assert s.errors.on(:author)

That should be assert_nil if you expect no errors.

“test/unit/helpers/profile_helper_test.rb”
“test/unit/helpers/community_helper_test.rb” “test/unit/user_test.rb”
“test/unit/story_test.rb”
ruby index.rb
rake aborted!
Command failed with status (1): [/usr/bin/ruby1.8 -I"lib:test"
"/usr/lib/ru…]

That is a completely different error, it is rake that is aborting, not
the test that is failing (that is why it says ‘rake aborted’). It has
not got as far as running the tests, so the content of the tests is
immaterial. Show us the rest of the message - but first look through
it yourself and see if you can see what is the problem, or at least
some hint as to the problem. The next bit that you have not showed us
may well be the key.

Colin

Colin L. wrote in post #962795:

class AnnnetteTest < ActiveSupport::TestCase
def test_should_be_valid_with_story
a = Annnette.new(:story => ‘Neil’)
assert_nil a.errors.on(:story)
end

Colin

OK that worked so I changed the test in my other app (the one that
matters) to

class StoryTest < ActiveSupport::TestCase
def test_should_be_valid_with_author
s = Story.create(:author => ‘neil’, :title => ‘Story’, :body =>
‘test’)
assert s.errors.on(:author)
end

When I run the test I still get

neil@baby6:~/$ rake test:units
(in /home/neil/
)
/usr/bin/ruby1.8 -I"lib:test"
“/usr/lib/ruby/1.8/rake/rake_test_loader.rb” “test/unit/comment_test.rb”
“test/unit/user_mailer_test.rb” “test/unit/friendship_test.rb”
“test/unit/helpers/friendship_helper_test.rb”
“test/unit/helpers/profile_helper_test.rb”
“test/unit/helpers/community_helper_test.rb” “test/unit/user_test.rb”
“test/unit/story_test.rb”
ruby index.rb
rake aborted!
Command failed with status (1): [/usr/bin/ruby1.8 -I"lib:test"
"/usr/lib/ru…]

Gleble

Colin L. wrote in post #962810:

That is a completely different error, it is rake that is aborting, not
the test that is failing (that is why it says ‘rake aborted’). It has
not got as far as running the tests, so the content of the tests is
immaterial. Show us the rest of the message - but first look through
it yourself and see if you can see what is the problem, or at least
some hint as to the problem. The next bit that you have not showed us
may well be the key.

Colin

That’s what I thought at first. I built the test app t try and make sure
the test bit worked . Anyhow heres the whole thing.

Gleble

neil@baby6:~/$ rake test:units --trace
(in /home/neil/
*)
** Invoke test:units (first_time)
** Invoke db:test:prepare (first_time)
** Invoke db:abort_if_pending_migrations (first_time)
** Invoke environment (first_time)
** Execute environment
** Execute db:abort_if_pending_migrations
** Execute db:test:prepare
** Invoke db:test:load (first_time)
** Invoke db:test:purge (first_time)
** Invoke environment
** Execute db:test:purge
** Execute db:test:load
** Invoke db:schema:load (first_time)
** Invoke environment
** Execute db:schema:load
** Execute test:units
/usr/bin/ruby1.8 -I"lib:test"
“/usr/lib/ruby/1.8/rake/rake_test_loader.rb” “test/unit/comment_test.rb”
“test/unit/user_mailer_test.rb” “test/unit/friendship_test.rb”
“test/unit/helpers/friendship_helper_test.rb”
“test/unit/helpers/profile_helper_test.rb”
“test/unit/helpers/community_helper_test.rb” “test/unit/user_test.rb”
“test/unit/story_test.rb”
ruby index.rb
rake aborted!
Command failed with status (1): [/usr/bin/ruby1.8 -I"lib:test"
"/usr/lib/ru…]
/usr/lib/ruby/1.8/rake.rb:995
/usr/lib/ruby/1.8/rake.rb:1010:in call' /usr/lib/ruby/1.8/rake.rb:1010:insh’
/usr/lib/ruby/1.8/rake.rb:1094:in sh' /usr/lib/ruby/1.8/rake.rb:1029:inruby’
/usr/lib/ruby/1.8/rake.rb:1094:in ruby' /usr/lib/ruby/1.8/rake/testtask.rb:117 /usr/lib/ruby/1.8/rake.rb:1112:inverbose’
/usr/lib/ruby/1.8/rake/testtask.rb:102
/usr/lib/ruby/1.8/rake.rb:636:in call' /usr/lib/ruby/1.8/rake.rb:636:inexecute’
/usr/lib/ruby/1.8/rake.rb:631:in each' /usr/lib/ruby/1.8/rake.rb:631:inexecute’
/usr/lib/ruby/1.8/rake.rb:597:in invoke_with_call_chain' /usr/lib/ruby/1.8/monitor.rb:242:insynchronize’
/usr/lib/ruby/1.8/rake.rb:590:in invoke_with_call_chain' /usr/lib/ruby/1.8/rake.rb:583:ininvoke’
/usr/lib/ruby/1.8/rake.rb:2051:in invoke_task' /usr/lib/ruby/1.8/rake.rb:2029:intop_level’
/usr/lib/ruby/1.8/rake.rb:2029:in each' /usr/lib/ruby/1.8/rake.rb:2029:intop_level’
/usr/lib/ruby/1.8/rake.rb:2068:in standard_exception_handling' /usr/lib/ruby/1.8/rake.rb:2023:intop_level’
/usr/lib/ruby/1.8/rake.rb:2001:in run' /usr/lib/ruby/1.8/rake.rb:2068:instandard_exception_handling’
/usr/lib/ruby/1.8/rake.rb:1998:in `run’
/usr/bin/rake:28