* JsApiReporter - better inteface for getting spec results (it's a slice!)

* Removed RSpec dependency from running self_test/CI - includes using new Jasmine::Formatter::Console from the gem
*
This commit is contained in:
Dan Hansen and Davis W. Frank
2013-02-26 12:24:59 -08:00
parent 2c06e36b9b
commit 98ae076f0c
8 changed files with 69 additions and 48 deletions

View File

@@ -43,13 +43,9 @@ task :list_dev_tasks do
system "thor list" system "thor list"
end end
require "jasmine" # TODO: Is there better way to invoke this using Jasmine gem???
require 'rspec' task :core_spec do
require 'rspec/core/rake_task' exec "ruby spec/jasmine_self_test_spec.rb"
desc "Run all examples"
RSpec::Core::RakeTask.new(:jasmine_core_spec) do |t|
t.pattern = 'spec/jasmine_self_test_spec.rb'
end end
namespace :jasmine do namespace :jasmine do

View File

@@ -252,7 +252,7 @@ jasmine.HtmlReporter = function(options) {
this.last = function() { this.last = function() {
return this.children[this.children.length-1]; return this.children[this.children.length-1];
} };
};jasmine.QueryString = function(options) { };jasmine.QueryString = function(options) {
this.setParam = function(key, value) { this.setParam = function(key, value) {

View File

@@ -50,4 +50,4 @@ body { background-color: #eeeeee; padding: 0; margin: 5px; overflow-y: scroll; }
.html-reporter .failures .spec-detail .description { display: block; color: white; background-color: #b03911; } .html-reporter .failures .spec-detail .description { display: block; color: white; background-color: #b03911; }
.html-reporter .result-message { padding-top: 14px; color: #333333; } .html-reporter .result-message { padding-top: 14px; color: #333333; }
.html-reporter .result-message span.result { display: block; } .html-reporter .result-message span.result { display: block; }
.html-reporter .stack-trace { margin: 5px 0 0 0; max-height: 224px; overflow: auto; line-height: 18px; color: #666666; border: 1px solid #ddd; background: white; white-space: pre; } .html-reporter .stack-trace { margin: 5px 0 0 0; max-height: 224px; overflow: auto; line-height: 18px; color: #666666; border: 1px solid #dddddd; background: white; white-space: pre; }

View File

@@ -439,7 +439,7 @@ jasmine.util.argsToArray = function(args) {
var arrayOfArgs = []; var arrayOfArgs = [];
for (var i = 0; i < args.length; i++) arrayOfArgs.push(args[i]); for (var i = 0; i < args.length; i++) arrayOfArgs.push(args[i]);
return arrayOfArgs; return arrayOfArgs;
};jasmine.exceptionMessageFor = function(e) { };jasmine.exceptionFormatter = function(e) {
var message = e.name var message = e.name
+ ': ' + ': '
+ e.message + e.message
@@ -938,8 +938,6 @@ jasmine.JsApiReporter = function(jasmine) {
this.jasmine = jasmine || {}; this.jasmine = jasmine || {};
this.started = false; this.started = false;
this.finished = false; this.finished = false;
this.suites_ = [];
this.results_ = {};
var status = 'loaded'; var status = 'loaded';
@@ -975,19 +973,16 @@ jasmine.JsApiReporter = function(jasmine) {
return suites; return suites;
}; };
var specs = {}; var specs = [];
this.specStarted = function(result) { this.specStarted = function(result) {
storeSpec(result); specs.push(result);
}; };
this.specDone = function(result) { this.specDone = function(result) { };
storeSpec(result);
};
function storeSpec(result) { this.specResults = function(index, length) {
specs[result.id] = result; return specs.slice(index, index + length);
} };
this.specs = function() { this.specs = function() {
return specs; return specs;

View File

@@ -150,23 +150,52 @@ describe("JsApiReporter", function() {
}); });
it("tracks a spec", function() { it("tracks a spec", function() {
var reporter = new jasmine.JsApiReporter(); var reporter = new jasmine.JsApiReporter(),
result = {
id: 123,
description: "A spec"
};
reporter.specStarted({ reporter.specStarted(result);
id: 123,
description: "A spec"
});
var specs = reporter.specs(); var specs = reporter.specs();
expect(specs).toEqual({123: {id: 123, description: "A spec"}}); expect(specs).toEqual([result]);
reporter.specDone({ result.status = "passed";
id: 123,
description: "A spec", reporter.specDone(result);
status: 'passed'
expect(specs).toEqual([result]);
});
describe("#specResults", function() {
var reporter, specResult1, specResult2;
beforeEach(function() {
reporter = new jasmine.JsApiReporter();
specResult1 = {
id: 1,
description: "A spec"
};
specResult2 = {
id: 2,
description: "Another spec"
};
reporter.specStarted(specResult1);
reporter.specStarted(specResult2);
}); });
expect(specs).toEqual({123: {id: 123, description: "A spec", status: 'passed'}}); it("should return a slice of results", function() {
expect(reporter.specResults(0, 1)).toEqual([specResult1]);
expect(reporter.specResults(1, 1)).toEqual([specResult2]);
});
describe("when the results do not exist", function() {
it("should return a slice of shorter length", function() {
expect(reporter.specResults(0, 3)).toEqual([specResult1, specResult2]);
expect(reporter.specResults(2, 3)).toEqual([]);
});
});
}); });
}); });

View File

@@ -1,3 +1,5 @@
require 'rubygems'
require 'bundler/setup'
require 'jasmine' require 'jasmine'
Jasmine.load_configuration_from_yaml(File.join(Dir.pwd, 'spec', 'jasmine.yml')) Jasmine.load_configuration_from_yaml(File.join(Dir.pwd, 'spec', 'jasmine.yml'))
@@ -16,8 +18,12 @@ t.abort_on_exception = true
Jasmine::wait_for_listener(config.port, "jasmine server") Jasmine::wait_for_listener(config.port, "jasmine server")
puts "jasmine server started." puts "jasmine server started."
results_processor = Jasmine::ResultsProcessor.new(config) reporter = Jasmine::Runners::ApiReporter.new(driver, config.result_batch_size)
results = Jasmine::Runners::HTTP.new(driver, results_processor, config.result_batch_size).run raw_results = Jasmine::Runners::HTTP.new(driver, reporter).run
formatter = Jasmine::RspecFormatter.new results = Jasmine::Results.new(raw_results)
formatter.format_results(results)
formatter = Jasmine::Formatters::Console.new(results)
puts formatter.failures
puts formatter.summary
exit results.failures.size

View File

@@ -2,8 +2,6 @@ jasmine.JsApiReporter = function(jasmine) {
this.jasmine = jasmine || {}; this.jasmine = jasmine || {};
this.started = false; this.started = false;
this.finished = false; this.finished = false;
this.suites_ = [];
this.results_ = {};
var status = 'loaded'; var status = 'loaded';
@@ -39,19 +37,16 @@ jasmine.JsApiReporter = function(jasmine) {
return suites; return suites;
}; };
var specs = {}; var specs = [];
this.specStarted = function(result) { this.specStarted = function(result) {
storeSpec(result); specs.push(result);
}; };
this.specDone = function(result) { this.specDone = function(result) { };
storeSpec(result);
};
function storeSpec(result) { this.specResults = function(index, length) {
specs[result.id] = result; return specs.slice(index, index + length);
} };
this.specs = function() { this.specs = function() {
return specs; return specs;

View File

@@ -50,4 +50,4 @@ body { background-color: #eeeeee; padding: 0; margin: 5px; overflow-y: scroll; }
.html-reporter .failures .spec-detail .description { display: block; color: white; background-color: #b03911; } .html-reporter .failures .spec-detail .description { display: block; color: white; background-color: #b03911; }
.html-reporter .result-message { padding-top: 14px; color: #333333; } .html-reporter .result-message { padding-top: 14px; color: #333333; }
.html-reporter .result-message span.result { display: block; } .html-reporter .result-message span.result { display: block; }
.html-reporter .stack-trace { margin: 5px 0 0 0; max-height: 224px; overflow: auto; line-height: 18px; color: #666666; border: 1px solid #ddd; background: white; white-space: pre; } .html-reporter .stack-trace { margin: 5px 0 0 0; max-height: 224px; overflow: auto; line-height: 18px; color: #666666; border: 1px solid #dddddd; background: white; white-space: pre; }