Basic problems running tests

I’ve tried to run scaffold-generated tests and the results is not what I
would have expected. Basically all tests fail because the framework is
trying to delete from the table and ignoring the table alias. I have two
problems with that.

  1. So I understand now that by default the test framework is trying to
    load the test fixtures and before doing so it deletes the old ones. But
    I don’t want to delete anything from my database. How do I prevent the
    test framework from trying to delete records?
  2. Why is the table alias being ignored? When executed as a rails
    application the table alias is resolved correctly.

This is what my auto-generated model and controller tests look like,
both of them attempting to delete from a non-aliased (and non-existent)
users table before they do anything in their own code.

unit\user_test.rb
require ‘test_helper’

class UserTest < ActiveSupport::TestCase

Replace this with your real tests.

test “the truth” do
assert true
end
end

functional\users_controller_test.rb
require ‘test_helper’

class UsersControllerTest < ActionController::TestCase
test “should get index” do
get :index
assert_response :success
assert_not_nil assigns(:users)
end

test “should get new” do
get :new
assert_response :success
end

test “should create user” do
assert_difference(‘User.count’) do
post :create, :user => { }
end

assert_redirected_to user_path(assigns(:user))

end

test “should show user” do
get :show, :id => users(:one).to_param
assert_response :success
end

test “should get edit” do
get :edit, :id => users(:one).to_param
assert_response :success
end

test “should update user” do
put :update, :id => users(:one).to_param, :user => { }
assert_redirected_to user_path(assigns(:user))
end

test “should destroy user” do
assert_difference(‘User.count’, -1) do
delete :destroy, :id => users(:one).to_param
end

assert_redirected_to users_path

end
end

On Aug 26, 5:26 pm, Tomasz R. [email protected] wrote:

I can’t say I really know what I’m doing here but when I derive from a
base unit testcase rather ActiveSupport testcase I seem to get what I
want. Not sure what I’m losing by not deriving from ActiveSupport
testcase.

ActiveSupport::TestCase is what gets you the activerecord fixture
stuff (eg the fixture accessor methods). It’s also the thing that
loads fixtures. ActionController::TestCase (which derives from
ActiveSupport::TestCase) handles the boiler plate of setting up the
test request for you, and creates the get/put/… methods you use in
functional tests.

I’m not entirely sure what you mean by the table alias being ignored,
but if you mean that the fixtures ignore the set_table_name in your
models that’s because fixtures don’t work that way - the fixture file
name should be the name of the table, not the name of the model

Fred

I can’t say I really know what I’m doing here but when I derive from a
base unit testcase rather ActiveSupport testcase I seem to get what I
want. Not sure what I’m losing by not deriving from ActiveSupport
testcase.

require ‘test_helper’

class UserTest < Test::Unit::TestCase

Replace this with your real tests.

def the_truth
assert true
end
end

Tomasz R. wrote:

This is what my auto-generated model and controller tests look like,
both of them attempting to delete from a non-aliased (and non-existent)
users table before they do anything in their own code.

unit\user_test.rb
require ‘test_helper’

class UserTest < ActiveSupport::TestCase

Replace this with your real tests.

test “the truth” do
assert true
end
end

functional\users_controller_test.rb
require ‘test_helper’

class UsersControllerTest < ActionController::TestCase
test “should get index” do
get :index
assert_response :success
assert_not_nil assigns(:users)
end

test “should get new” do
get :new
assert_response :success
end

test “should create user” do
assert_difference(‘User.count’) do
post :create, :user => { }
end

assert_redirected_to user_path(assigns(:user))

end

test “should show user” do
get :show, :id => users(:one).to_param
assert_response :success
end

test “should get edit” do
get :edit, :id => users(:one).to_param
assert_response :success
end

test “should update user” do
put :update, :id => users(:one).to_param, :user => { }
assert_redirected_to user_path(assigns(:user))
end

test “should destroy user” do
assert_difference(‘User.count’, -1) do
delete :destroy, :id => users(:one).to_param
end

assert_redirected_to users_path

end
end

Frederick C. wrote:

On Aug 26, 5:26�pm, Tomasz R. [email protected] wrote:

I can’t say I really know what I’m doing here but when I derive from a
base unit testcase rather ActiveSupport testcase I seem to get what I
want. Not sure what I’m losing by not deriving from ActiveSupport
testcase.

ActiveSupport::TestCase is what gets you the activerecord fixture
stuff (eg the fixture accessor methods). It’s also the thing that
loads fixtures. ActionController::TestCase (which derives from
ActiveSupport::TestCase) handles the boiler plate of setting up the
test request for you, and creates the get/put/… methods you use in
functional tests.

I’m not entirely sure what you mean by the table alias being ignored,
but if you mean that the fixtures ignore the set_table_name in your
models that’s because fixtures don’t work that way - the fixture file
name should be the name of the table, not the name of the model

…which is another of the many, many reasons not to ever use fixtures.
Use factories instead.

Fred

Best,

Marnen Laibow-Koser
http://www.marnen.org
[email protected]

Thanks. Does Rspec have the same support as ActiveSupport and
ActionController testcases? I’m considering using Rspec since it comes
with a server that loads the rails environment only once saving the
rails startup time each time I run the test. I’m using windows and
needless to say the startup time is ridiculously slow. I’m also going to
try andLinux but would like to keep Rspec as an option.

Frederick C. wrote:

On Aug 26, 5:26�pm, Tomasz R. [email protected] wrote:

I can’t say I really know what I’m doing here but when I derive from a
base unit testcase rather ActiveSupport testcase I seem to get what I
want. Not sure what I’m losing by not deriving from ActiveSupport
testcase.

ActiveSupport::TestCase is what gets you the activerecord fixture
stuff (eg the fixture accessor methods). It’s also the thing that
loads fixtures. ActionController::TestCase (which derives from
ActiveSupport::TestCase) handles the boiler plate of setting up the
test request for you, and creates the get/put/… methods you use in
functional tests.

I’m not entirely sure what you mean by the table alias being ignored,
but if you mean that the fixtures ignore the set_table_name in your
models that’s because fixtures don’t work that way - the fixture file
name should be the name of the table, not the name of the model

Fred

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs