Functional testing

Hi there,
I’m implementing the Globalize plugin on my application, and so far it’s
working quite well.
One problem I’m having is that I can’t do any functional tests.
It appears as though the locale is not set for the tests, and an error
is
thrown by the find_every function where it tries to get the language
code.
This problem is not seen outside of testing.

is this common? Can anyone else reproduce it? Is there a fix?
I’m using Rails 1.1 and the 1.1 branch of Globalize.

Also the include_translated option for the find method doesn’t appear to
work.
Is there some trick to use it? It always throws an invalid option error.

Regards,
Bonne Eggeleston.

I am having about the same issue. I’m using Globalize with a switch in
the url like “:locale/:controller/…” and it breaks functional tests,
spitting out “No url can be generated for the hash”-routing errors. I’ve
tried to get around this by setting up a redirect. This would even come
in handy for other reasons. What I tried to achieve is that urls without
the locale like “www.url.com/mycontroller/” would get redirected to
www.url.com/en/mycontroller/”, with “en” here being the default locale.
Does anyone know how to get this done?

Greetings
Patrick

Bonne Eggleston wrote:

Hi there,
I’m implementing the Globalize plugin on my application, and so far it’s
working quite well.
One problem I’m having is that I can’t do any functional tests.
It appears as though the locale is not set for the tests.

Having the same problem. I’ve had to comment out all my functional tests
for the moment because of locale not being set. Anyone know of a
solution?

Posted about it here also:

Bitbutter wrote:

Posted about it here also:
bitbutter.com

I’m experiencing the same problem, but since I’ve just started learning
Rails, I can’t seem to fix it. Does anyone have a solution yet?

Benjamin K. wrote:

try this:

Loading test environment.

Locale
=> Globalize::Locale

Locale.set_base_language Language.pick(‘en’)
=> English

Locale.base_language
=> English

Locale.set_base_language Language.pick(‘de’)
=> German

Locale.base_language
=> German

Odd, i get an error when i try that:

Loading test environment.

Locale
=> Globalize::Locale

Locale.set_base_language Language.pick(‘en’)
ArgumentError: bad format for , not rfc-3066 compliant
from
./script/…/config/…/config/…/vendor/plugins/globalize/lib/globalize/localization/rfc_3066.rb:6:in
parse' from ./script/../config/../config/../vendor/plugins/globalize/lib/globalize/localization/locale.rb:64:inset_base_language’
from (irb):2

(rails 1.1.6.5618)

On Dec 12, 2006, at 15:21, KJ Wierenga wrote:

Bitbutter wrote:

Posted about it here also:
bitbutter.com
my-functional-tests/

I’m experiencing the same problem, but since I’ve just started
learning
Rails, I can’t seem to fix it. Does anyone have a solution yet?

try this:

Loading test environment.

Locale
=> Globalize::Locale
Locale.set_base_language Language.pick(‘en’)
=> English
Locale.base_language
=> English
Locale.set_base_language Language.pick(‘de’)
=> German
Locale.base_language
=> German

KJ Wierenga wrote:

When I use Locale.set_base_language Language.pick(‘en’) function I get:

/vendor/plugins/globalize/lib/globalize/localization/rfc_3066.rb:6:in
`parse’: bad format for , not rfc-3066 compliant (ArgumentError)

So same error as Bitbutter. I’m using Rails 1.1.6 on Windows

When I use Locale.set_base_language Language.pick(‘en’) function I get:

/vendor/plugins/globalize/lib/globalize/localization/rfc_3066.rb:6:in
`parse’: bad format for , not rfc-3066 compliant (ArgumentError)

(KJ Wierenga: i initially tried a set up like the one you posted but
also ran into similar recursion difficulties. If you like you can mail
me at kj.1.cbit AT spamgourmet.com and i’ll send you some examples of
the sessions based approach i’m using now)

I managed to get rid of the ‘base_language’ not set error by having the
following code in my ApplicationController:

class ApplicationController < ActionController::Base
model :cart
model :line_item

before_filter :set_locale
after_filter :set_charset

def set_locale
if !params[:locale].nil? && LOCALES.keys.include?(params[:locale])
Locale.set LOCALES[params[:locale]]
else
if Locale.base_language
redirect_to params.merge( ‘locale’ => Locale.base_language.code
)
else
redirect_to params.merge( ‘locale’ => ‘en’ )
end
return true
end
end


end

But now I get:

Exception: Render and/or redirect were called multiple times in this
action. Please note that you may only call render OR redirect, and only
once per action. Also note that neither redirect nor render terminate
execution of the action, so if you want to exit an action after
redirecting, you need to do something like “redirect_to(…) and
return”. Finally, note that to cause a before filter to halt execution
of the rest of the filter chain, the filter must return false,
explicitly, so “render(…) and return false”.
d:/Tools/InstantRails/ruby/lib/ruby/gems/1.8/gems/actionpack-1.12.5/lib/action_controller/base.rb:840:in
redirect_to' d:/Tools/InstantRails/ruby/lib/ruby/gems/1.8/gems/actionpack-1.12.5/lib/action_controller/base.rb:854:inredirect_to’
D:/Projects/Rails/depot/config/…/app/controllers/application.rb:43:in
authorize' d:/Tools/InstantRails/ruby/lib/ruby/gems/1.8/gems/actionpack-1.12.5/lib/action_controller/filters.rb:399:insend’
d:/Tools/InstantRails/ruby/lib/ruby/gems/1.8/gems/actionpack-1.12.5/lib/action_controller/filters.rb:399:in
call_filters' d:/Tools/InstantRails/ruby/lib/ruby/gems/1.8/gems/actionpack-1.12.5/lib/action_controller/filters.rb:394:ineach’
d:/Tools/InstantRails/ruby/lib/ruby/gems/1.8/gems/actionpack-1.12.5/lib/action_controller/filters.rb:394:in
call_filters' d:/Tools/InstantRails/ruby/lib/ruby/gems/1.8/gems/actionpack-1.12.5/lib/action_controller/filters.rb:383:inbefore_action’
d:/Tools/InstantRails/ruby/lib/ruby/gems/1.8/gems/actionpack-1.12.5/lib/action_controller/filters.rb:365:in
perform_action_without_benchmark' d:/Tools/InstantRails/ruby/lib/ruby/gems/1.8/gems/actionpack-1.12.5/lib/action_controller/benchmarking.rb:69:inperform_action_without_rescue’
d:/Tools/InstantRails/ruby/lib/ruby/1.8/benchmark.rb:293:in measure' d:/Tools/InstantRails/ruby/lib/ruby/gems/1.8/gems/actionpack-1.12.5/lib/action_controller/benchmarking.rb:69:inperform_action_without_rescue’
d:/Tools/InstantRails/ruby/lib/ruby/gems/1.8/gems/actionpack-1.12.5/lib/action_controller/rescue.rb:82:in
perform_action' d:/Tools/InstantRails/ruby/lib/ruby/gems/1.8/gems/actionpack-1.12.5/lib/action_controller/base.rb:408:insend’
d:/Tools/InstantRails/ruby/lib/ruby/gems/1.8/gems/actionpack-1.12.5/lib/action_controller/base.rb:408:in
process_without_filters' d:/Tools/InstantRails/ruby/lib/ruby/gems/1.8/gems/actionpack-1.12.5/lib/action_controller/filters.rb:377:inprocess_without_session_management_support’
d:/Tools/InstantRails/ruby/lib/ruby/gems/1.8/gems/actionpack-1.12.5/lib/action_controller/session_management.rb:117:in
process_without_test' d:/Tools/InstantRails/ruby/lib/ruby/gems/1.8/gems/actionpack-1.12.5/lib/action_controller/test_process.rb:16:inprocess’
d:/Tools/InstantRails/ruby/lib/ruby/gems/1.8/gems/actionpack-1.12.5/lib/action_controller/test_process.rb:363:in
process' d:/Tools/InstantRails/ruby/lib/ruby/gems/1.8/gems/actionpack-1.12.5/lib/action_controller/test_process.rb:336:inget’
D:\Projects\Rails\depot/test/functional/login_controller_test.rb:17:in
test_index' d:/Tools/InstantRails/ruby/lib/ruby/1.8/test/unit/testcase.rb:72:insend
d:/Tools/InstantRails/ruby/lib/ruby/1.8/test/unit/testcase.rb:72:in
run' d:/Tools/InstantRails/ruby/lib/ruby/1.8/test/unit/testsuite.rb:34:inrun’
d:/Tools/InstantRails/ruby/lib/ruby/1.8/test/unit/testsuite.rb:33:in
each' d:/Tools/InstantRails/ruby/lib/ruby/1.8/test/unit/testsuite.rb:33:inrun’
d:/Tools/InstantRails/ruby/lib/ruby/1.8/test/unit/testsuite.rb:34:in
run' d:/Tools/InstantRails/ruby/lib/ruby/1.8/test/unit/testsuite.rb:33:ineach’
d:/Tools/InstantRails/ruby/lib/ruby/1.8/test/unit/testsuite.rb:33:in
run' d:/Tools/InstantRails/ruby/lib/ruby/1.8/test/unit/ui/testrunnermediator.rb:46:inrun_suite’
D:/Tools/RadRails_0_7_2/plugins/org.rubypeople.rdt.testunit_0.8.0.604272100PRD/ruby/RemoteTestRunner.rb:107:in
start_mediator' D:/Tools/RadRails_0_7_2/plugins/org.rubypeople.rdt.testunit_0.8.0.604272100PRD/ruby/RemoteTestRunner.rb:52:instart’
D:/Tools/RadRails_0_7_2/plugins/org.rubypeople.rdt.testunit_0.8.0.604272100PRD/ruby/RemoteTestRunner.rb:272

Perhaps you meant to return false in a filter chain after a redirect?

http://weblog.jamisbuck.org/2005/7/8/rails-tip-of-the-day

FYI: be careful with the set_charset action:

http://www.nabble.com/FIXED-Internet-Explorer-cannot-download-pages-tf2716459s17045.html

On 12/12/06, Bitbutter [email protected] wrote:

http://rubyforge.org/mailman/listinfo/railsi18n-discussion


Charles Brian Q.
self-promotion: www.seebq.com
highgroove studios: www.highgroove.com
slingshot hosting: www.slingshothosting.com