Hi there,
So I have an odd error at the moment that only occurs when I run tests
via rake. It''s happening with two tests now. Under a simple ruby run,
the tests are fine, e.g.:
D:\User\Code\ruby\prometheus>ruby
test\functional\story_comments_controller_test
.rb
Loaded suite test/functional/story_comments_controller_test
Started
.........
Finished in 2.37 seconds.
9 tests, 65 assertions, 0 failures, 0 errors
However when I run rake I get this:
2) Error:
test_search(StoryCommentsControllerTest):
ActionView::TemplateError: Couldn''t find Story without an ID AND
(status
= ''approved'')
On line #2 of app/views/story_comments/list.rhtml
1: <%unless params.has_key?(:search_terms)%>
2: <%= render_component(:controller => ''stories'',
:action => ''show'',:id
=> params[:id], :params=>{:context=>''small''})%>
3: <%else%>
Now the weird thing is, it that this line 2 of list.rhtml shouldn''t get
processed at all for this test:
def test_search
get :search, {:params => {:search_terms =>''comment''}},
@session
assert_response :success
assert_template ''list''
end
so running the test without rake produces the correct result, whereas
running with rake leads to this error. I get another similar template
based error under rake that also doesn''t occur when run without rake.
Has anybody seen anything similar? Have any idea how to fix this?
Many thanks in advance.
CHEERS> SAM
I was having some odd problems with fixtures over the weekend. Are you using them? When I manually deleted all data and reloaded then the tests passed. I was going to do some investigation to see if it was just me or a bug somewhere but I haven''t had time yet. Let me know if manually creating new fixture data in your setup() method helps. - Byron On 2/6/06, Sam Joseph <sam@neurogrid.com> wrote:> > Hi there, > > So I have an odd error at the moment that only occurs when I run tests > via rake. It''s happening with two tests now. Under a simple ruby run, > the tests are fine, e.g.: > > D:\User\Code\ruby\prometheus>ruby > test\functional\story_comments_controller_test > .rb > Loaded suite test/functional/story_comments_controller_test > Started > ......... > Finished in 2.37 seconds. > > 9 tests, 65 assertions, 0 failures, 0 errors > > However when I run rake I get this: > > 2) Error: > test_search(StoryCommentsControllerTest): > ActionView::TemplateError: Couldn''t find Story without an ID AND (status > = ''approved'') > On line #2 of app/views/story_comments/list.rhtml > > 1: <%unless params.has_key?(:search_terms)%> > 2: <%= render_component(:controller => ''stories'', :action => ''show'',:id > => params[:id], :params=>{:context=>''small''})%> > 3: <%else%> > > > Now the weird thing is, it that this line 2 of list.rhtml shouldn''t get > processed at all for this test: > > def test_search > get :search, {:params => {:search_terms =>''comment''}}, @session > > assert_response :success > assert_template ''list'' > end > > so running the test without rake produces the correct result, whereas > running with rake leads to this error. I get another similar template > based error under rake that also doesn''t occur when run without rake. > > Has anybody seen anything similar? Have any idea how to fix this? > > Many thanks in advance. > CHEERS> SAM > _______________________________________________ > Rails mailing list > Rails@lists.rubyonrails.org > http://lists.rubyonrails.org/mailman/listinfo/rails >-- Byron http://byron.saltysiak.com -------------- next part -------------- An HTML attachment was scrubbed... URL: http://wrath.rubyonrails.org/pipermail/rails/attachments/20060206/26adf83f/attachment.html
Hi Byron, I am using fixtures - although the success or failure of this test should be unrelated to them, i.e. the test in question doesn''t rely on the presence or absence of data in the database. Just in case I tried removing the fixtures from that functional test and re-ran under rake and simple ruby command line. The presence or absence of fixtures did not appear to have any effect on the test in question, although interestingly the set of errors I got under rake was different from what I got on the command line (i.e. in other tests where I would expect fixtures to effect things), which suggests that as you say rake and fixtures have some problems, but it doesn''t account for the particular problem I am having. Many thanks for your input. CHEERS> SAM Byron Saltysiak wrote:> I was having some odd problems with fixtures over the weekend. Are you > using them? When I manually deleted all data and reloaded then the > tests passed. I was going to do some investigation to see if it was > just me or a bug somewhere but I haven''t had time yet. > > Let me know if manually creating new fixture data in your setup() > method helps. > > - Byron > > On 2/6/06, *Sam Joseph* <sam@neurogrid.com <mailto:sam@neurogrid.com>> > wrote: > > Hi there, > > So I have an odd error at the moment that only occurs when I run tests > via rake. It''s happening with two tests now. Under a simple ruby run, > the tests are fine, e.g.: > > D:\User\Code\ruby\prometheus>ruby > test\functional\story_comments_controller_test > .rb > Loaded suite test/functional/story_comments_controller_test > Started > ......... > Finished in 2.37 seconds. > > 9 tests, 65 assertions, 0 failures, 0 errors > > However when I run rake I get this: > > 2) Error: > test_search(StoryCommentsControllerTest): > ActionView::TemplateError: Couldn''t find Story without an ID AND > (status > = ''approved'') > On line #2 of app/views/story_comments/list.rhtml > > 1: <%unless params.has_key?(:search_terms)%> > 2: <%= render_component(:controller => ''stories'', :action => > ''show'',:id > => params[:id], :params=>{:context=>''small''})%> > 3: <%else%> > > > Now the weird thing is, it that this line 2 of list.rhtml > shouldn''t get > processed at all for this test: > > def test_search > get :search, {:params => {:search_terms =>''comment''}}, @session > > assert_response :success > assert_template ''list'' > end > > so running the test without rake produces the correct result, whereas > running with rake leads to this error. I get another similar template > based error under rake that also doesn''t occur when run without rake. > > Has anybody seen anything similar? Have any idea how to fix this? > > Many thanks in advance. > CHEERS> SAM > _______________________________________________ > Rails mailing list > Rails@lists.rubyonrails.org <mailto:Rails@lists.rubyonrails.org> > http://lists.rubyonrails.org/mailman/listinfo/rails > > > > > -- > Byron > http://byron.saltysiak.com
I am still discovering new things about Raking tests myself, but I ran into some tests that would pass individually, but fail under rake a while back. In my situation is was because the developement and testing databases were out of sync. I believe that rake uses the schema from development to initialize the testing db, but when you run tests individually, it does not. matt On 2/6/06, Sam Joseph <sam@neurogrid.com> wrote:> > Hi Byron, > > I am using fixtures - although the success or failure of this test > should be unrelated to them, i.e. the test in question doesn''t rely on > the presence or absence of data in the database. > > Just in case I tried removing the fixtures from that functional test and > re-ran under rake and simple ruby command line. The presence or absence > of fixtures did not appear to have any effect on the test in question, > although interestingly the set of errors I got under rake was different > from what I got on the command line (i.e. in other tests where I would > expect fixtures to effect things), which suggests that as you say rake > and fixtures have some problems, but it doesn''t account for the > particular problem I am having. > > Many thanks for your input. > > CHEERS> SAM > > Byron Saltysiak wrote: > > > I was having some odd problems with fixtures over the weekend. Are you > > using them? When I manually deleted all data and reloaded then the > > tests passed. I was going to do some investigation to see if it was > > just me or a bug somewhere but I haven''t had time yet. > > > > Let me know if manually creating new fixture data in your setup() > > method helps. > > > > - Byron > > > > On 2/6/06, *Sam Joseph* <sam@neurogrid.com <mailto:sam@neurogrid.com>> > > wrote: > > > > Hi there, > > > > So I have an odd error at the moment that only occurs when I run > tests > > via rake. It''s happening with two tests now. Under a simple ruby > run, > > the tests are fine, e.g.: > > > > D:\User\Code\ruby\prometheus>ruby > > test\functional\story_comments_controller_test > > .rb > > Loaded suite test/functional/story_comments_controller_test > > Started > > ......... > > Finished in 2.37 seconds. > > > > 9 tests, 65 assertions, 0 failures, 0 errors > > > > However when I run rake I get this: > > > > 2) Error: > > test_search(StoryCommentsControllerTest): > > ActionView::TemplateError: Couldn''t find Story without an ID AND > > (status > > = ''approved'') > > On line #2 of app/views/story_comments/list.rhtml > > > > 1: <%unless params.has_key?(:search_terms)%> > > 2: <%= render_component(:controller => ''stories'', :action => > > ''show'',:id > > => params[:id], :params=>{:context=>''small''})%> > > 3: <%else%> > > > > > > Now the weird thing is, it that this line 2 of list.rhtml > > shouldn''t get > > processed at all for this test: > > > > def test_search > > get :search, {:params => {:search_terms =>''comment''}}, @session > > > > assert_response :success > > assert_template ''list'' > > end > > > > so running the test without rake produces the correct result, > whereas > > running with rake leads to this error. I get another similar > template > > based error under rake that also doesn''t occur when run without > rake. > > > > Has anybody seen anything similar? Have any idea how to fix this? > > > > Many thanks in advance. > > CHEERS> SAM > > _______________________________________________ > > Rails mailing list > > Rails@lists.rubyonrails.org <mailto:Rails@lists.rubyonrails.org> > > http://lists.rubyonrails.org/mailman/listinfo/rails > > > > > > > > > > -- > > Byron > > http://byron.saltysiak.com > > > _______________________________________________ > Rails mailing list > Rails@lists.rubyonrails.org > http://lists.rubyonrails.org/mailman/listinfo/rails >-------------- next part -------------- An HTML attachment was scrubbed... URL: http://wrath.rubyonrails.org/pipermail/rails/attachments/20060206/5ef05d19/attachment.html
Sam, Your first post had an error on a retrieval... if the test_destroy was called first and the fixtures aren''t properly resetting then this could be the problem. - Byron On 2/6/06, Sam Joseph <sam@neurogrid.com> wrote:> > Hi Byron, > > I am using fixtures - although the success or failure of this test > should be unrelated to them, i.e. the test in question doesn''t rely on > the presence or absence of data in the database. > > Just in case I tried removing the fixtures from that functional test and > re-ran under rake and simple ruby command line. The presence or absence > of fixtures did not appear to have any effect on the test in question, > although interestingly the set of errors I got under rake was different > from what I got on the command line (i.e. in other tests where I would > expect fixtures to effect things), which suggests that as you say rake > and fixtures have some problems, but it doesn''t account for the > particular problem I am having. > > Many thanks for your input. > > CHEERS> SAM > > Byron Saltysiak wrote: > > > I was having some odd problems with fixtures over the weekend. Are you > > using them? When I manually deleted all data and reloaded then the > > tests passed. I was going to do some investigation to see if it was > > just me or a bug somewhere but I haven''t had time yet. > > > > Let me know if manually creating new fixture data in your setup() > > method helps. > > > > - Byron > > > > On 2/6/06, *Sam Joseph* <sam@neurogrid.com <mailto:sam@neurogrid.com>> > > wrote: > > > > Hi there, > > > > So I have an odd error at the moment that only occurs when I run > tests > > via rake. It''s happening with two tests now. Under a simple ruby > run, > > the tests are fine, e.g.: > > > > D:\User\Code\ruby\prometheus>ruby > > test\functional\story_comments_controller_test > > .rb > > Loaded suite test/functional/story_comments_controller_test > > Started > > ......... > > Finished in 2.37 seconds. > > > > 9 tests, 65 assertions, 0 failures, 0 errors > > > > However when I run rake I get this: > > > > 2) Error: > > test_search(StoryCommentsControllerTest): > > ActionView::TemplateError: Couldn''t find Story without an ID AND > > (status > > = ''approved'') > > On line #2 of app/views/story_comments/list.rhtml > > > > 1: <%unless params.has_key?(:search_terms)%> > > 2: <%= render_component(:controller => ''stories'', :action => > > ''show'',:id > > => params[:id], :params=>{:context=>''small''})%> > > 3: <%else%> > > > > > > Now the weird thing is, it that this line 2 of list.rhtml > > shouldn''t get > > processed at all for this test: > > > > def test_search > > get :search, {:params => {:search_terms =>''comment''}}, @session > > > > assert_response :success > > assert_template ''list'' > > end > > > > so running the test without rake produces the correct result, > whereas > > running with rake leads to this error. I get another similar > template > > based error under rake that also doesn''t occur when run without > rake. > > > > Has anybody seen anything similar? Have any idea how to fix this? > > > > Many thanks in advance. > > CHEERS> SAM > > _______________________________________________ > > Rails mailing list > > Rails@lists.rubyonrails.org <mailto:Rails@lists.rubyonrails.org> > > http://lists.rubyonrails.org/mailman/listinfo/rails > > > > > > > > > > -- > > Byron > > http://byron.saltysiak.com > > >-- Byron http://byron.saltysiak.com -------------- next part -------------- An HTML attachment was scrubbed... URL: http://wrath.rubyonrails.org/pipermail/rails/attachments/20060206/c77ea87a/attachment.html
Hi Byron, Byron Saltysiak wrote:> Your first post had an error on a retrieval... if the test_destroy was > called first and the fixtures aren''t properly resetting then this > could be the problem.It did, but the retrieval error comes not from the absence in the database, but from a segment of code being called when there isn''t a parameter being passed in necessary for it''s completion. The relevant code is as follows: 1:<%unless params.has_key?(:id)%> 2: <%= render_component(:controller => ''stories'', :action => ''show'',:id => params[:id], params=>{:context=>''small''})%> 3: <%else%> 4: <h1><%=@description%></h1> .... The point is that in absence of the id parameter, the line 2 shouldn''t be executed at all, and it isn''t when the test runs standalone - however, under rake, it does get executed, and I can''t work out why ... When the test does work (ruby command line or even using the rake loader) I''ve checked the log and the incoming request is: Processing StoryCommentsController#search (for 0.0.0.0 at 2006-02-07 19:36:43) [GET] Parameters: {"action"=>"search", "controller"=>"story_comments", "params"=>{"search _terms"=>"comment"}} while if I run the entire suite of tests with the rake_loader I get the error, but the incoming request is identical: Processing StoryCommentsController#search (for 0.0.0.0 at 2006-02-07 19:40:25) [GET] Parameters: {"action"=>"search", "controller"=>"story_comments", "params"=>{"search _terms"=>"comment"}} Anyhow, I just tried something else which is switching the test in the template to the following: <%unless params[:id].nil?%> and the test now runs under all conditions. Clearly there is a difference between params.has_key?[:id] and params[:id].nil? but it is still strange that the former should be evaluated as true under one testing environment, and not the other. CHEERS> SAM
Hi Matthew,
Thats an interesting point about the databases. My impression is that
rake runs the equivalent of the rake task "clone_structure_to_test"
before running the tests. I''m not sure that the development schema in
db/development_structure.sql is involved, but I would be happy to be
corrected on this. [although I did just note that the
development_structure.sql file did appear to have been modified
following a rake test that I just tan]
I''ve managed to solve by first rake weirdness by adjusting the way a
conditional check was made - nothing to do with fixtures or the database
(see my other mail). Another weirdness seems to be that I can run these
sometimes failing tests fine with the rake loader, e.g.
d:/ruby/bin/ruby -Ilib;test
"d:/ruby/lib/ruby/gems/1.8/gems/rake-0.6.2/lib/rake/rake_test_loader.rb"
"test/unit/stories_controller_test.rb"
but they fail when the whole battery of tests is included (I don''t have
to run rake to get the failure - just the above command line with the
rake_test_loader).
My latest weirdness comes from a template failing to receive a variable,
which it does fine as a single rake loaded item, but fails when all the
other tests are added.
I can even log the creation of the variable all the way to where the
mailer class assigns it, and it''s there all present and correct, except
when some threshold number of tests are added to rake:
1) Error:
test_admin_preview_create(StoriesControllerTest):
ActionView::TemplateError: You have a nil object when you didn''t expect
it!
The error occured while evaluating nil.title
On line #1 of app/views/story_mailer/notify.rhtml
1: <%=@story.title%>
2: By: <%=@story.user.full_name%>
3: <%=@story.summary%>
here''s the code that generates it:
def notify(controller,users,story,sent_at = Time.now)
@subject =
''[''+CommunitySystem::CONFIG[:app_name]+'':story]
''+ story.title
@body[''story''] = story
logger.info ''notify_body_story: ''+
@body[''story''].inspect
@body[''controller''] = controller
and here''s the logger output, showing the presence of the variable:
notify_body_story: #<Story:0x4b19370 @new_record=false,
@errors=#<ActiveRecord::Errors:0x4ae2260 @base=#<Story:0x4b19370 ...>,
@errors={}>, @new_record_before_save=false,
@attributes={"photo"=>nil,
"status"=>"approved",
"depttitle"=>"General", "title"=>"what
its about",
"id"=>4, "caption"=>nil,
"summary"=>"short but sweet", "posted"=>Tue
Feb
07 20:22:07 2006, "detail"=>"fine grained",
"authorid"=>1000006},
@story_comments=[]>
Now this works absolutely fine under all conditions, except if there are
more than about 12 tests being passed into the rake_loader. I''ve
tested
previously and it doesn''t seem to matter which other tests they are,
just that once the number of incoming tests exceeds 11 or 12, then this
failure pops up.
Sorry to give you quite so much details, but I''m partly documenting
this
to the list, because it is all so strange, and I''d like to think others
having the same problem will take some solace in that they are not alone.
CHEERS> SAM
matthew clark wrote:
> I am still discovering new things about Raking tests myself, but I ran
> into some tests that would pass individually, but fail under rake a
> while back.
>
> In my situation is was because the developement and testing databases
> were out of sync. I believe that rake uses the schema from
> development to initialize the testing db, but when you run tests
> individually, it does not.
>
> matt
>
> On 2/6/06, *Sam Joseph* <sam@neurogrid.com
<mailto:sam@neurogrid.com>>
> wrote:
>
> Hi Byron,
>
> I am using fixtures - although the success or failure of this test
> should be unrelated to them, i.e. the test in question doesn''t
rely on
> the presence or absence of data in the database.
>
> Just in case I tried removing the fixtures from that functional
> test and
> re-ran under rake and simple ruby command line. The presence or
> absence
> of fixtures did not appear to have any effect on the test in question,
> although interestingly the set of errors I got under rake was
> different
> from what I got on the command line (i.e. in other tests where I would
> expect fixtures to effect things), which suggests that as you say rake
> and fixtures have some problems, but it doesn''t account for
the
> particular problem I am having.
>
> Many thanks for your input.
>
> CHEERS> SAM
>
> Byron Saltysiak wrote:
>
> > I was having some odd problems with fixtures over the weekend.
> Are you
> > using them? When I manually deleted all data and reloaded then the
> > tests passed. I was going to do some investigation to see if it
was
> > just me or a bug somewhere but I haven''t had time yet.
> >
> > Let me know if manually creating new fixture data in your setup()
> > method helps.
> >
> > - Byron
> >
> > On 2/6/06, *Sam Joseph* <sam@neurogrid.com
> <mailto:sam@neurogrid.com> <mailto:sam@neurogrid.com
> <mailto:sam@neurogrid.com>>>
> > wrote:
> >
> > Hi there,
> >
> > So I have an odd error at the moment that only occurs when I
> run tests
> > via rake. It''s happening with two tests now. Under a
simple
> ruby run,
> > the tests are fine, e.g.:
> >
> > D:\User\Code\ruby\prometheus>ruby
> > test\functional\story_comments_controller_test
> > .rb
> > Loaded suite test/functional/story_comments_controller_test
> > Started
> > .........
> > Finished in 2.37 seconds.
> >
> > 9 tests, 65 assertions, 0 failures, 0 errors
> >
> > However when I run rake I get this:
> >
> > 2) Error:
> > test_search(StoryCommentsControllerTest):
> > ActionView::TemplateError: Couldn''t find Story
without an ID AND
> > (status
> > = ''approved'')
> > On line #2 of app/views/story_comments/list.rhtml
> >
> > 1: <%unless params.has_key?(:search_terms)%>
> > 2: <%= render_component(:controller =>
''stories'', :action =>
> > ''show'',:id
> > => params[:id],
:params=>{:context=>''small''})%>
> > 3: <%else%>
> >
> >
> > Now the weird thing is, it that this line 2 of list.rhtml
> > shouldn''t get
> > processed at all for this test:
> >
> > def test_search
> > get :search, {:params => {:search_terms
=>''comment''}}, @session
> >
> > assert_response :success
> > assert_template ''list''
> > end
> >
> > so running the test without rake produces the correct
> result, whereas
> > running with rake leads to this error. I get another similar
> template
> > based error under rake that also doesn''t occur when
run
> without rake.
> >
> > Has anybody seen anything similar? Have any idea how to fix
> this?
> >
> > Many thanks in advance.
> > CHEERS> SAM
> > _______________________________________________
> > Rails mailing list
> > Rails@lists.rubyonrails.org
> <mailto:Rails@lists.rubyonrails.org>
> <mailto:Rails@lists.rubyonrails.org
> <mailto:Rails@lists.rubyonrails.org>>
> > http://lists.rubyonrails.org/mailman/listinfo/rails
> <http://lists.rubyonrails.org/mailman/listinfo/rails>
> >
> >
> >
> >
> > --
> > Byron
> > http://byron.saltysiak.com
>
>
> _______________________________________________
> Rails mailing list
> Rails@lists.rubyonrails.org <mailto:Rails@lists.rubyonrails.org>
> http://lists.rubyonrails.org/mailman/listinfo/rails
>
>
I am trying to populate a select() popup menu with all of the
currently entered options from the database. My thinking is that I
would search the database for all records, then call my "get_options"
with the name of the field as an argument.
def list
@assets = Asset.find(:all)
get_options(@assets,"asset_type")
end
private
def get_options(items,field)
@options = []
items.each do |@item|
@options << @item.field
end
@options = @options.sort.uniq
end
This doesn''t work. However, if I replace:
@options << @item.field
with:
@options << @item.asset_type
(...where "asset_type" is the name of a field in the database) it
does work. Now, I''m trying to follow the DRY principles, but I
can''t
figure out how to pass the field name to "get_options". I could
write a dozen or so "get_options_asset_type",
"get_options_serial_number" and the like and it would work, but this
is an opportunity for me to learn. How am I supposed to do this?
- Peter
I am trying to populate a select() popup menu with all of the
currently entered options from the database. My thinking is that I
would search the database for all records, then call my "get_options"
with the name of the field as an argument.
def list
@assets = Asset.find(:all)
get_options(@assets,"asset_type")
end
private
def get_options(items,field)
@options = []
items.each do |@item|
@options << @item.field
end
@options = @options.sort.uniq
end
This doesn''t work. However, if I replace:
@options << @item.field
with:
@options << @item.asset_type
(...where "asset_type" is the name of a field in the database) it
does work. Now, I''m trying to follow the DRY principles, but I
can''t
figure out how to pass the field name to "get_options". I could
write a dozen or so "get_options_asset_type",
"get_options_serial_number" and the like and it would work, but this
is an opportunity for me to learn. How am I supposed to do this?
- Peter
Hi -- On Fri, 10 Feb 2006, Peter T Bosse II wrote:> I am trying to populate a select() popup menu with all of the currently > entered options from the database. My thinking is that I would search the > database for all records, then call my "get_options" with the name of the > field as an argument. > > def list > @assets = Asset.find(:all) > get_options(@assets,"asset_type") > end > > private > def get_options(items,field) > @options = [] > items.each do |@item| > @options << @item.field > end > @options = @options.sort.uniq > end > > This doesn''t work. However, if I replace: > > @options << @item.field > > with: > > @options << @item.asset_type > > (...where "asset_type" is the name of a field in the database) it does work. > Now, I''m trying to follow the DRY principles, but I can''t figure out how to > pass the field name to "get_options". I could write a dozen or so > "get_options_asset_type", "get_options_serial_number" and the like and it > would work, but this is an opportunity for me to learn. How am I supposed to > do this?You can use send: @options << @item.send(field) You could tighten up the method a bit if you like (untested rewrite follows): def get_options(items,field) @options = items.map {|item| item.send(field) }.sort.uniq end (I''ve changed @item to item as it wasn''t clear why that would need to be an instance variable.) David -- David A. Black (dblack@wobblini.net) Ruby Power and Light (http://www.rubypowerandlight.com) "Ruby for Rails" chapters now available from Manning Early Access Program! http://www.manning.com/books/black