From 7dfe0f0c22583010a6e1c72378703c4a9d6a02c3 Mon Sep 17 00:00:00 2001 From: Brian Donovan + Christian Williams Date: Fri, 13 Jan 2012 16:06:22 -0800 Subject: [PATCH] Fail if a JS file has a syntax error. --- lib/jasmine/run.html.erb | 57 ++++++++++++++++++- lib/jasmine/server.rb | 34 +++++++++++ spec/fixture/spec/example_spec.js | 4 +- .../spec/example_with_syntax_error_spec.js | 0 spec/server_spec.rb | 14 +++-- 5 files changed, 100 insertions(+), 9 deletions(-) create mode 100644 spec/fixture/spec/example_with_syntax_error_spec.js diff --git a/lib/jasmine/run.html.erb b/lib/jasmine/run.html.erb index 00436d49..83dec20e 100644 --- a/lib/jasmine/run.html.erb +++ b/lib/jasmine/run.html.erb @@ -41,12 +41,67 @@ } })(); + + jasmine._runner_ = { + expectedFiles: [<%= js_files.map {|file| file.inspect }.join(', ') %>], + loadedFiles: {}, + errors: {}, + addError: function(error) { + var errors = this.errors[this.currentFile] || (this.errors[this.currentFile] = []); + errors.push(error); + }, + fileLoaded: function() { + this.loadedFiles[this.currentFile] = true; + }, + onError: function(message, file, line) { + jasmine._runner_.addError({ + message: message, + file: file, + line: line + }); + }, + oldOnError: window.onerror + }; + + window.onerror = jasmine._runner_.onError; <% js_files.each do |js_file| %> - + + <% end %> +
diff --git a/lib/jasmine/server.rb b/lib/jasmine/server.rb index da8c4256..df0c776e 100644 --- a/lib/jasmine/server.rb +++ b/lib/jasmine/server.rb @@ -71,9 +71,43 @@ def call(env) end end + class JasmineLoadFlag + def initialize(app) + @app = app + end + + def call(env) + code, headers, body = @app.call(env) + + if code == 200 && (headers['Content-Type'] && headers['Content-Type'].include?('javascript')) + body = JsFileFlagAppender.new(body) + headers.delete('Content-Length') + end + + [code, headers, body] + end + end + + class JsFileFlagAppender + def initialize(body) + @body = body + end + + def each(&block) + @body.each(&block) + block.call("\n\njasmine._runner_.fileLoaded();") + end + + def close + @body.close if @body.respond_to?(:close) + end + end + def self.app(config) Rack::Builder.app do use Rack::Head + use JasmineLoadFlag + if Jasmine::Dependencies.rails_3_asset_pipeline? map('/assets') do run Rails.application.assets diff --git a/spec/fixture/spec/example_spec.js b/spec/fixture/spec/example_spec.js index 7403e49b..a534a46e 100644 --- a/spec/fixture/spec/example_spec.js +++ b/spec/fixture/spec/example_spec.js @@ -1,5 +1,5 @@ describe("example_spec", function() { it("should be here for path loading tests", function() { expect(true).toBe(true); - } -}) + }); +}); diff --git a/spec/fixture/spec/example_with_syntax_error_spec.js b/spec/fixture/spec/example_with_syntax_error_spec.js new file mode 100644 index 00000000..e69de29b diff --git a/spec/server_spec.rb b/spec/server_spec.rb index c5e37469..7f4f2dff 100644 --- a/spec/server_spec.rb +++ b/spec/server_spec.rb @@ -2,6 +2,8 @@ require 'rack/test' describe "Jasmine.app" do + LOADED_FLAG = "\n\njasmine._runner_.fileLoaded();" + include Rack::Test::Methods def app @@ -15,25 +17,25 @@ def app Jasmine.app(config) end - it "should serve static files from spec dir under __spec__" do + it "should serve static files from spec dir under __spec__ with loaded flag appended" do get "/__spec__/example_spec.js" last_response.status.should == 200 last_response.content_type.should == "application/javascript" - last_response.body.should == File.read(File.join(@root, "fixture/spec/example_spec.js")) + last_response.body.should == File.read(File.join(@root, "fixture/spec/example_spec.js")) + LOADED_FLAG end - it "should serve static files from root dir under __root__" do + it "should serve static files from root dir under __root__ with loaded flag appended" do get "/__root__/fixture/src/example.js" last_response.status.should == 200 last_response.content_type.should == "application/javascript" - last_response.body.should == File.read(File.join(@root, "fixture/src/example.js")) + last_response.body.should == File.read(File.join(@root, "fixture/src/example.js")) + LOADED_FLAG end - it "should serve static files from src dir under /" do + it "should serve static files from src dir under / with loaded flag appended" do get "/example.js" last_response.status.should == 200 last_response.content_type.should == "application/javascript" - last_response.body.should == File.read(File.join(@root, "fixture/src/example.js")) + last_response.body.should == File.read(File.join(@root, "fixture/src/example.js")) + LOADED_FLAG end it "should serve Jasmine static files under /__JASMINE_ROOT__/" do