From b7425b38a4950906d2543e05c7b3e4d013617c4c Mon Sep 17 00:00:00 2001 From: John Bintz Date: Mon, 18 Apr 2011 09:32:43 -0400 Subject: [PATCH] add helper generator --- .autotest | 5 +++++ bin/backbone-generator | 5 +++++ spec/bin/backbone-generator_spec.rb | 8 ++++++++ templates/collection_spec.js.erb | 17 ++++++----------- templates/spec_helper.js.erb | 22 ++++++++++++++++++++++ 5 files changed, 46 insertions(+), 11 deletions(-) create mode 100644 .autotest create mode 100644 templates/spec_helper.js.erb diff --git a/.autotest b/.autotest new file mode 100644 index 0000000..33dabb2 --- /dev/null +++ b/.autotest @@ -0,0 +1,5 @@ +Autotest.add_hook(:initialize) do |at| + at.add_mapping(%r{bin/(.*)}, true) do |filename, matches| + at.files_matching(%r{spec/bin/#{matches[1]}_spec\.rb}) + end +end diff --git a/bin/backbone-generator b/bin/backbone-generator index dc56927..3cbb1d1 100755 --- a/bin/backbone-generator +++ b/bin/backbone-generator @@ -72,6 +72,11 @@ class BackboneGenerator < Thor @name = name %w{model view collection collection_view}.each { |which| send("generate_#{which}") } end + + desc 'spec-helper', "Generate a spec helper for Backbone things" + def spec_helper + template('spec_helper.js.erb', 'spec/javascripts/helpers/backbone_spec_helper.js') + end end BackboneGenerator.start diff --git a/spec/bin/backbone-generator_spec.rb b/spec/bin/backbone-generator_spec.rb index 0914244..ee0d15b 100644 --- a/spec/bin/backbone-generator_spec.rb +++ b/spec/bin/backbone-generator_spec.rb @@ -93,4 +93,12 @@ describe 'backbone-generator' do should_generate_collection_view end end + + describe 'spec helper' do + it "should generate a spec helper" do + system %{bin/backbone-generator spec-helper} + + File.file?(collection = 'spec/javascripts/helpers/backbone_spec_helper.js').should be_true + end + end end diff --git a/templates/collection_spec.js.erb b/templates/collection_spec.js.erb index d6b6709..e58d77c 100644 --- a/templates/collection_spec.js.erb +++ b/templates/collection_spec.js.erb @@ -1,21 +1,16 @@ describe('<%= object_name %>s', function() { - var collection, server; + var collection; - beforeEach(function() { - server = sinon.fakeServer().create(); - }); - - afterEach(function() { - server.restore(); - }); + withServer(); it('should fetch records from the API', function() { collection = new <%= object_name %>s(); - server.respondWith('GET', '<%= underscore_name %>', [ 200, { 'Content-type': 'application/json' }, "[{id: 1}]" ]); + this.server.respondWith('GET', '<%= underscore_name %>', this.validJSONResponse([{id: 1}])); collection.fetch() - server.respond(); + this.server.respond(); expect(collection.length).toEqual(1); }); -}s); +}); + diff --git a/templates/spec_helper.js.erb b/templates/spec_helper.js.erb new file mode 100644 index 0000000..4d642be --- /dev/null +++ b/templates/spec_helper.js.erb @@ -0,0 +1,22 @@ +/* Backbone helpers. Requires json2 and sinon-server or the full-blown sinon. */ + +var withServer = function() { + jasmine.getEnv().currentSpec.withServer(); +}; +if (isCommonJS) exports.withServer = withServer; + +jasmine.Env.prototype.withServer = function() { + this.currentSuite.beforeEach(function() { + this.server = sinon.fakeServer().create(); + }); + + this.currentSuite.afterEach(function() { + this.server.restore(); + }); +}; + +beforeEach(function() { + this.validJSONResponse = function(data) { + return [ 200, { 'Content-type': 'application/json' }, JSON.stringify(data) ]; + }; +});