From 6181ca600d3deced0a054551ff6c704bc17d6b7d Mon Sep 17 00:00:00 2001 From: Igor Minar Date: Mon, 2 May 2011 10:16:50 -0700 Subject: new batch of tutorial docs --- docs/content/tutorial/step_02.ngdoc | 311 ++++++++++++++++++++---------------- 1 file changed, 174 insertions(+), 137 deletions(-) (limited to 'docs/content/tutorial/step_02.ngdoc') diff --git a/docs/content/tutorial/step_02.ngdoc b/docs/content/tutorial/step_02.ngdoc index 50fbd240..143e310a 100755 --- a/docs/content/tutorial/step_02.ngdoc +++ b/docs/content/tutorial/step_02.ngdoc @@ -1,137 +1,174 @@ -@workInProgress -@ngdoc overview -@name Tutorial: Step 2 -@description -
| {@link tutorial.step_01 Previous} | -{@link http://angular.github.com/angular-phonecat/step-2/app Example} | -{@link tutorial Tutorial Home} | -{@link https://github.com/angular/angular-phonecat/compare/step-1...step-2 Code -Diff} | -{@link tutorial.step_03 Next} | -
-... - - -
{{phone.snippet}}
-
-/* App Controllers */
-
-function PhoneListCtrl() {
- this.phones = [{"name": "Nexus S",
- "snippet": "Fast just got faster with Nexus S."},
- {"name": "Motorola XOOM™ with Wi-Fi",
- "snippet": "The Next, Next Generation tablet."},
- {"name": "MOTOROLA XOOM™",
- "snippet": "The Next, Next Generation tablet."}];
-}
-
-
-The "Angular way" urges us to test as we develop:
-
-__`test/unit/controllersSpec.js`:__
-
-/* jasmine specs for controllers go here */
-describe('PhoneCat controllers', function() {
-
- describe('PhoneListCtrl', function(){
-
- it('should create "phones" model with 3 phones', function() {
- var ctrl = new PhoneListCtrl();
- expect(ctrl.phones.length).toBe(3);
- });
- });
-});
-
-
-## Discussion:
-
-So what were our changes from Step 1?
-
-* __View template:__ We replaced the hard-coded phone list with the {@link
-angular.widget.@ng:repeat ng:repeat widget} and two {@link guide.expression angular expressions}
-enclosed in curly braces: `{{phone.name}}` and `{{phone.snippet}}`:
-
- * The `ng:repeat="phone in phones"` statement in the `| {@link tutorial.step_01 Previous} | +{@link http://angular.github.com/angular-phonecat/step-2/app Live + Demo} | +{@link tutorial Tutorial Home} | +{@link https://github.com/angular/angular-phonecat/compare/step-1...step-2 Code +Diff} | +{@link tutorial.step_03 Next} | +
+... + + +
{{phone.snippet}}
+
+function PhoneListCtrl() {
+ this.phones = [{"name": "Nexus S",
+ "snippet": "Fast just got faster with Nexus S."},
+ {"name": "Motorola XOOM™ with Wi-Fi",
+ "snippet": "The Next, Next Generation tablet."},
+ {"name": "MOTOROLA XOOM™",
+ "snippet": "The Next, Next Generation tablet."}];
+}
+
+
+Although the controller is not yet doing very much controlling, it is playing a crucial role. By
+providing context for our data model, the controller allows us to establish data-binding between
+the model and the view. Note in the following how we connected the dots between our presentation,
+data, and logic components:
+
+ * The name of our controller function (in the JavaScript file `controllers.js`) matches the
+ {@link angular.directive.ng:controller ng:controller} directive in the `` tag
+ (`PhoneListCtrl`).
+ * We instantiated our data within the scope of our controller function, and our template
+ binding points are located within the block bounded by the `
+describe('PhoneCat controllers', function() {
+
+ describe('PhoneListCtrl', function(){
+
+ it('should create "phones" model with 3 phones', function() {
+ var ctrl = new PhoneListCtrl();
+ expect(ctrl.phones.length).toBe(3);
+ });
+ });
+});
+
+
+Ease of testing is another cornerstone of angular's design philosophy. All we are doing here is
+showing how easy it is to create a unit test. The test verifies that we have 3 records in the
+phones array.
+
+Angular developers prefer the syntax of Jasmine's Behavior-driven Development (BDD) framework when
+writing tests. Although Jasmine is not required by angular, we used it to write all tests in this
+tutorial. You can learn about Jasmine on the {@link http://pivotal.github.com/jasmine/ Jasmine
+home page} and on the {@link https://github.com/pivotal/jasmine/wiki Jasmine wiki}.
+
+angular-seed project is pre-configured to run all unit tests using {@link
+http://code.google.com/p/js-test-driver/ JsTestDriver}. To run the test, do the following:
+
+ 1. In a _separate_ terminal window or tab, go to the `angular-phonecat` directory and run
+ `./scripts/test-server.sh` to start the test web server.
+
+ 2. Open a new browser tab or window, navigate to http://localhost:9876, and choose "strict
+ mode". At this point, you can leave this tab open and forget about it. JsTestDriver will
+ use it to execute our tests and report the results in the terminal.
+
+ 3. Execute the test by running `./scripts/test.sh`
+
+You should see the following or similar output:
+
+ Chrome: Runner reset.
+ .
+ Total 1 tests (Passed: 1; Fails: 0; Errors: 0) (2.00 ms)
+ Chrome 11.0.696.57 Mac OS: Run 1 tests (Passed: 1; Fails: 0; Errors 0) (2.00 ms)
+
+Yay! The test passed! Now, let's go to Step 3 to learn how to add full text search to the app.
+
+
+| {@link tutorial.step_01 Previous} | +{@link http://angular.github.com/angular-phonecat/step-2/app Live + Demo} | +{@link tutorial Tutorial Home} | +{@link https://github.com/angular/angular-phonecat/compare/step-1...step-2 Code +Diff} | +{@link tutorial.step_03 Next} | +