# Basic problems running tests

**URL:** <https://www.ruby-forum.com/t/basic-problems-running-tests/193920>\
**Category:** Rails\
**Created:** [August 26, 2010, 3:49pm UTC](https://www.ruby-forum.com/t/basic-problems-running-tests/193920 "2010-08-26T15:49:13Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![techy\_bolek](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/ee59a6/32.png) [@techy\_bolek](https://www.ruby-forum.com/u/techy_bolek)\
**Post date:** [August 26, 2010, 3:49pm UTC](https://www.ruby-forum.com/t/basic-problems-running-tests/193920/1 "2010-08-26T15:49:13Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![techy\_bolek](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/ee59a6/32.png) [@techy\_bolek](https://www.ruby-forum.com/u/techy_bolek)\
**Post date:** [August 26, 2010, 5:44pm UTC](https://www.ruby-forum.com/t/basic-problems-running-tests/193920/2 "2010-08-26T17:44:19Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![techy\_bolek](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/ee59a6/32.png) [@techy\_bolek](https://www.ruby-forum.com/u/techy_bolek)\
**Post date:** [August 26, 2010, 7:34pm UTC](https://www.ruby-forum.com/t/basic-problems-running-tests/193920/3 "2010-08-26T19:34:08Z")

</div>

On Aug 26, 5:26 pm, Tomasz R. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) 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

---

<div class="post-metadata">

**Author:** ![techy\_bolek](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/ee59a6/32.png) [@techy\_bolek](https://www.ruby-forum.com/u/techy_bolek)\
**Post date:** [August 26, 2010, 6:26pm UTC](https://www.ruby-forum.com/t/basic-problems-running-tests/193920/4 "2010-08-26T18:26:32Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![techy\_bolek](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/ee59a6/32.png) [@techy\_bolek](https://www.ruby-forum.com/u/techy_bolek)\
**Post date:** [August 26, 2010, 9:08pm UTC](https://www.ruby-forum.com/t/basic-problems-running-tests/193920/5 "2010-08-26T21:08:22Z")

</div>

Frederick C. wrote:

> On Aug 26, 5:26ï¿½pm, Tomasz R. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) 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](http://www.marnen.org)  
removed\_email\_address@domain.invalid

---

<div class="post-metadata">

**Author:** ![techy\_bolek](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/ee59a6/32.png) [@techy\_bolek](https://www.ruby-forum.com/u/techy_bolek)\
**Post date:** [August 26, 2010, 8:13pm UTC](https://www.ruby-forum.com/t/basic-problems-running-tests/193920/6 "2010-08-26T20:13:08Z")

</div>

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. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) 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
