bundacia
bundacia

Reputation: 1036

Getting an error when running headless jasmine tests in rails

I've got a rake task set up to run headless jasmine tests on a build server and output the results in junit format. Here's the task:

namespace :jasmine do                                                                             
  desc "Runs Jasmine tests headlessly and writes out junit xml."                                  
  task :headless_junit do |t, args|                                                               
    run_jasmine_tests(Dir.pwd)                                                                    
  end                                                                                             
end                                                                                               

def run_jasmine_tests(output_dir)                                                                 
  require 'headless'                                                                              
  require 'jasmine'                                                                               
  require 'rspec'                                                                                 
  require 'rspec/core/rake_task'                                                                  

  output_file = "#{output_dir}/jasmine_results.xml"                                               

  Headless.ly do                                                                                  
    RSpec::Core::RakeTask.new(:jasmine_continuous_integration_runner) do |t|                      
      t.rspec_opts = ['--format', 'RspecJunitFormatter', '--out', output_file ]                   
      t.verbose = true                                                                            
      t.rspec_opts += ["-r #{File.expand_path(File.join(::Rails.root, 'config', 'environment'))}"]
      t.pattern = [Jasmine.runner_filepath]                                                       
    end                                                                                           

    Rake::Task['jasmine_continuous_integration_runner'].invoke                                    
  end                                                                                             

end                                                                                               

When I run the this I get this error:

TypeError: jasmine.getEnv(...).currentSpec is null in http://localhost:34002/assets/jquery.js?body=true (line 1129)
expect@http://localhost:34002/assets/jquery.js?body=true:1129                                                      
@http://localhost:34002/__spec__/activity_catalog_search_filters_spec.js:15                                        
jasmine.Block.prototype.execute@http://localhost:34002/__jasmine__/jasmine.js:1064                                 
jasmine.Queue.prototype.next_@http://localhost:34002/__jasmine__/jasmine.js:2096
jasmine.Queue.prototype.next_/onComplete/<@http://localhost:34002/__jasmine__/jasmine.js:2086
... LOTS MORE ...

I'm using rails 3.2.13, jasmine 1.3.2, headless 1.0.1, rspec 2.14.1 and Jasmine-jQuery 1.5.8

I think it could be similar to the problem this guy is having: TypeError: jasmine.getEnv().currentSpec is null

Upvotes: 1

Views: 382

Answers (1)

bundacia
bundacia

Reputation: 1036

Turns out the issue was with a test that was using jQuery.get to load a url into the dom. An empty string was being passed down as the url (since the test writer didn't really care what was loaded I guess) but that caused jQuery to fetch the current page (the jasmine tests themselves) and load that into the dom. Massive chaos ensued.

The more interesting thing (and perhaps more helpful) was how we figured that out. Turns out the fancy rake task was not the issue. It's just that the headless tests use Firefox and I usually load them manually in chrome, where this error didn't seem to happen. One I had the error reproduced in Firefox it was easy enough to track down the cause with the debugger.

So the bottom line is, if you're ci tests are failing and you can't reproduce it, try loading them manually in Firefox.

Upvotes: 1

Related Questions