Hi folks, In writing an engine, it seems to me that I'd want to put all my model and controller classes within a namespace, to avoid name clashes with similarly named classes in the base application, or other engines. By namespaces, I mean wrap the class in a module. For example, I'm writing a forum engine, and I have two models. Forum::Thread Forum::Comment And I've called their tables in the database: forum_threads forum_comments I think this will prevent clashes nicelly, and rails handles it by creating a /views/forum/ directory for my views. This all works fine as a rails app, and it runs fine too when I move it into an engine, except for loading fixtures in tests. Rails does not have support for looking in a sub directory of "fixtures", so i need to call my fixture files: forum_threads.yml forum_comments.yml Then, I do the following in my test case: fixtures :forum_threads, :forum_comments set_fixture_class :forum_comments => Forum::Comment set_fixture_class :forum_threads => Forum::Thread This works in a normal rails app, but not in an engine. All my tests do something like this: 1) Error: test_create_replaces_form_if_invalid(Forum::ThreadControllerTest): FixtureClassNotFound: The class "ForumThread" was not found. method find in fixtures.rb at line 403 method instantiate_fixtures in testing_extensions.rb at line 86 method instantiate_fixtures in testing_extensions.rb at line 85 method silence in base.rb at line 794 method instantiate_fixtures in testing_extensions.rb at line 84 method instantiate_fixtures in testing_extensions.rb at line 317 method instantiate_fixtures in testing_extensions.rb at line 316 method setup_with_fixtures in fixtures.rb at line 525 method setup in fixtures.rb at line 547 Does anyone know of any difference in the way that namespaces (nested modules) work in engines compared to normal apps? I'm using rails 1.1.6 cheers, Craig www.craigambrose.com
on 2006-08-28 05:47
on 2007-02-04 15:15
Hi Craig, did you ever figure this out? I seem to have the same problem where my tests are not able to load fixtures for a name-spaced model. I get the same error: FixtureClassNotFound: The class "MyappCountry" was not found. (my model is Myapp::Country) Ingo
on 2007-04-19 23:51
I have this issue as well. I noticed that the namespace models are not being found properly or the framework is not finding the fixture class name check out issue #5157 if you have a solution I'd love to hear it! Ingo Weiss wrote: > Hi Craig, did you ever figure this out? I seem to have the same problem > where my tests are not able to load fixtures for a name-spaced model. I > get the same error: > > FixtureClassNotFound: The class "MyappCountry" was not found. > > (my model is Myapp::Country) > > Ingo
on 2007-04-21 18:44
My solution was
require File.dirname(__FILE__) + '/../../test_helper'
class Messaging::BulletinTest < Test::Unit::TestCase
Test::Unit::TestCase.fixture_path= File.dirname(__FILE__)
+"/../../fixtures/messaging"
fixtures :messaging_bulletins
set_fixture_class :messaging_bulletins => Messaging::Bulletin
def test_database
assert_equal messaging_bulletins(:one).id, 1
end
end
notice the Test::Unit::TestCase.fixture_path function sets the path to
the fixtures which I want to use in this test case.
then I assign the fixture class to my namespaced model.
cheers!
Tim
Tim Glenn wrote:
> I have this issue as well. I noticed that the namespace models are not
> being found properly or the framework is not finding the fixture class
> name check out issue #5157
>
> if you have a solution I'd love to hear it!
>
>
> Ingo Weiss wrote:
>> Hi Craig, did you ever figure this out? I seem to have the same problem
>> where my tests are not able to load fixtures for a name-spaced model. I
>> get the same error:
>>
>> FixtureClassNotFound: The class "MyappCountry" was not found.
>>
>> (my model is Myapp::Country)
>>
>> Ingo
Please log in before posting. Registration is free and takes only a minute.
Existing account
(Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
Log in with Google account | Log in with Yahoo account
No account? Register here.