diff options
| author | Andres Ornelas | 2010-06-09 16:05:51 -0700 |
|---|---|---|
| committer | Andres Ornelas | 2010-06-09 16:05:51 -0700 |
| commit | bbb45a7eed5264a343c191f3abfbe6f6b5d51139 (patch) | |
| tree | 340453d4268200f36a7934274450502145e123cf | |
| parent | 36b58b235eeca4e9580162a697d8a96c41263ebc (diff) | |
| parent | d0a468153d98c892323cb135b509cb46f67e44fd (diff) | |
| download | angular.js-bbb45a7eed5264a343c191f3abfbe6f6b5d51139.tar.bz2 | |
Merge branch 'repeater'
| -rw-r--r-- | src/scenario/DSL.js | 31 | ||||
| -rw-r--r-- | src/scenario/Runner.js | 15 | ||||
| -rw-r--r-- | test/scenario/DSLSpec.js | 14 | ||||
| -rw-r--r-- | test/scenario/RunnerSpec.js | 40 |
4 files changed, 82 insertions, 18 deletions
diff --git a/src/scenario/DSL.js b/src/scenario/DSL.js index b318e99c..194a28d6 100644 --- a/src/scenario/DSL.js +++ b/src/scenario/DSL.js @@ -2,7 +2,7 @@ angular.scenario.dsl.browser = { navigateTo: function(url){ $scenario.addStep('Navigate to: ' + url, function(done){ var self = this; - self.testFrame.load(function(){ + this.testFrame.load(function(){ self.testFrame.unbind(); self.testWindow = self.testFrame[0].contentWindow; self.testDocument = jQuery(self.testWindow.document); @@ -11,7 +11,7 @@ angular.scenario.dsl.browser = { self.notifyWhenNoOutstandingRequests(done); }); if (this.testFrame.attr('src') == url) { - this.testWindow.location.reload(); + this.testFrame[0].contentWindow.location.reload(); } else { this.testFrame.attr('src', url); } @@ -44,17 +44,20 @@ angular.scenario.dsl.input = function(selector) { }; }; -angular.scenario.dsl.expect = function(selector) { - return { - toEqual: function(expected) { - $scenario.addStep("Expect that " + selector + " equals '" + expected + "'", function(done){ - var attrName = selector.substring(2, selector.length - 2); - var binding = this.testDocument.find('span[ng-bind=' + attrName + ']'); - if (binding.text() != expected) { - this.result.fail("Expected '" + expected + "' but was '" + binding.text() + "'"); +angular.scenario.dsl.expect = { + repeater: function(selector) { + return { + count: { + toEqual: function(number) { + $scenario.addStep("Expect that there are " + number + " items in Repeater with selector '" + selector + "'", function(done) { + var items = this.testDocument.find(selector); + if (items.length != number) { + this.result.fail("Expected " + number + " but was " + items.length); + } + done(); + }); } - done(); - }); - } - }; + } + }; + } }; diff --git a/src/scenario/Runner.js b/src/scenario/Runner.js index da6e2c39..8e0cc909 100644 --- a/src/scenario/Runner.js +++ b/src/scenario/Runner.js @@ -8,23 +8,34 @@ angular.scenario.Runner = function(scope, jQuery){ var specs = this.specs = {}; var path = []; - this.scope.describe = function describe(name, body){ + this.scope.describe = function(name, body){ path.push(name); body(); path.pop(); }; - this.scope.it = function it(name, body) { + var beforeEach = noop; + var afterEach = noop; + this.scope.beforeEach = function(body) { + beforeEach = body; + }; + this.scope.afterEach = function(body) { + afterEach = body; + }; + this.scope.it = function(name, body) { var specName = path.join(' ') + ': it ' + name; self.currentSpec = specs[specName] = { name: specName, steps:[] }; try { + beforeEach(); body(); } catch(err) { self.addStep(err.message || 'ERROR', function(){ throw err; }); + } finally { + afterEach(); } self.currentSpec = null; }; diff --git a/test/scenario/DSLSpec.js b/test/scenario/DSLSpec.js index bed1f008..5aac9752 100644 --- a/test/scenario/DSLSpec.js +++ b/test/scenario/DSLSpec.js @@ -40,4 +40,16 @@ describe("DSL", function() { expect(lastDocument.find(':radio:checked').val()).toEqual('female'); }); }); -});
\ No newline at end of file + + describe('expect', function() { + var dslExpect = angular.scenario.dsl.expect; + describe('repeater', function() { + it('should check the count of repeated elements', function() { + dslExpect.repeater('.repeater-row').count.toEqual(2); + expect(lastStep.name).toEqual("Expect that there are 2 items in Repeater with selector '.repeater-row'"); + var html = "<div class='repeater-row'>a</div><div class='repeater-row'>b</div>"; + executeStep(lastStep, html); + }); + }); + }); +}); diff --git a/test/scenario/RunnerSpec.js b/test/scenario/RunnerSpec.js index 35d74f51..ca6e8eb2 100644 --- a/test/scenario/RunnerSpec.js +++ b/test/scenario/RunnerSpec.js @@ -14,6 +14,8 @@ describe('Runner', function(){ body = _jQuery('<div></div>'); runner = new angular.scenario.Runner(scenario, _jQuery); Describe = scenario.describe; + BeforeEach = scenario.beforeEach; + AfterEach = scenario.afterEach; It = scenario.it; $scenario = scenario.$scenario; }); @@ -36,7 +38,10 @@ describe('Runner', function(){ expect(spec.name).toEqual('describe name: it should text'); }); - it('should camplain on duplicate it', angular.noop); + it('should complain on duplicate it', function() { + // WRITE ME!!!! + }); + it('should create a failing step if there is a javascript error', function(){ var spec; Describe('D1', function(){ @@ -55,6 +60,39 @@ describe('Runner', function(){ }; }); }); + + describe('beforeEach', function() { + it('should execute beforeEach before every it', function() { + Describe('describe name', function(){ + BeforeEach(logger('before;')); + It('should text', logger('body;')); + It('should text2', logger('body2;')); + }); + expect(log).toEqual('before;body;before;body2;'); + }); + }); + describe('afterEach', function() { + it('should execute afterEach after every it', function() { + Describe('describe name', function(){ + AfterEach(logger('after;')); + It('should text', logger('body;')); + It('should text2', logger('body2;')); + }); + expect(log).toEqual('body;after;body2;after;'); + }); + + it('should always execute afterEach after every it', function() { + Describe('describe name', function(){ + AfterEach(logger('after;')); + It('should text', function() { + log = 'body;'; + throw "MyError"; + }); + It('should text2', logger('body2;')); + }); + expect(log).toEqual('body;after;body2;after;'); + }); + }); }); describe('steps building', function(){ |
