Hello World Angular JS

HTML

<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.0.6/angular.min.js"></script>
<script src="http://searls.github.io/jasmine-all/jasmine-all-min.js"></script>
<button onClick="rodarTestes()">Executar testes !</button>
<div ng-app="">
    <div ng-controller="HelloWorldCtrl">
        <p>
            <label>Nome</label>
            <input type="text" ng-model="nome" required="true" />
        </p>
        <p>
            <label>Número</label>
            <input type="number" ng-model="numero" required="true" />
        </p>
        <p>Olá {{nome}}</p>
        <p>Olá {{nome | uppercase}} - <em>(filtro uppercase)</em>

        </p>
        <p>{{numero | number:2}} - <em>(filtro number)</em>

        </p>
    </div>
</div>

CSS

.ng-invalid {
    border: 1px solid red;
}

JavaScript

function HelloWorldCtrl($scope) {
    $scope.nome = "mundo";
    $scope.numero = 123;
    
    $scope.digaOla = function () {
        return "Olá " + $scope.nome + "!";
    };
}

function rodarTestes() {

    describe("Controlador HelloWorld", function () {
        var scopeMock = {};
        var cntrl = null;
        beforeEach(function () {
            cntl = new HelloWorldCtrl(scopeMock);
        });

        it('nome deve ser inicializado com  "mundo"', function () {
            expect(scopeMock.nome).toEqual('mundo');
        });
        it('deve dizer olá ao novo nome definido', function () {
            scopeMock.nome = 'angular';
            expect(scopeMock.digaOla()).toEqual('Olá angular!');
        });
    });
    var jasmineEnv = jasmine.getEnv();
    jasmineEnv.updateInterval = 1000;
    jasmineEnv.execute();
}