Arquivo da categoria: TDD

AngularJS – Testing With Protractor Page Objects

index.spec.js

var IndexPage = require('./IndexPage');

describe("hello-protractor", function () {

  var page = new IndexPage();

  beforeEach(function() {
      page.get();
  });

  describe("index", function () {
    it("should display the correct title", function () {
      expect(page.getTitle()).toBe('hello protractor');
    });

    it("should display the message when button clicked", function () {
      page.clickButton();

      expect(page.getMessageText()).toBe('button 1 clicked');
    });
  });
});

IndexPage.js

function IndexPage() {
  this.button = element(by.id('button1'));
  this.message = element(by.binding('messageText'));

  this.get = function () {
    browser.get('/#');
  };

  this.clickButton = function () {
    this.button.click();
  };

  this.getTitle = function () {
    return browser.getTitle();
  };

  this.getMessageText = function () {
    return this.message.getText();
  }
}

module.exports = IndexPage;

AngularJS – Inject Jasmine Spies With $provide

app.js

var app = angular.module('app', []);

app.controller('ProfileCtrl',
    ['$scope', 'ProfileSvc',
        function ($scope,
                  profileSvc) {

            $scope.favoriteBooks = profileSvc
                .favoriteBooks();

        }]);

app.service('ProfileSvc', function () {
    this.favoriteBooks = function () {
        return JSON.parse(
            localStorage.getItem('favoriteBooks')
        );
    };
});

app.spec.js

describe("Providers", function () {
    var $scope,
        controller,
        profileSvcSpy,
        favoriteBooks = ["Lowside of the Road", "Life", "The Grand Pursuit"];

    beforeEach(module('app', function($provide) {
        profileSvcSpy = jasmine.createSpyObj("ProfileSvc", ["favoriteBooks"]);
        profileSvcSpy.favoriteBooks.andReturn(favoriteBooks);

        $provide.value("ProfileSvc", profileSvcSpy);
    }));
    beforeEach(inject(function($rootScope, $controller) {
        $scope = $rootScope.$new();
        controller = $controller('ProfileCtrl', {$scope: $scope});
    }));

    describe("Initialization", function () {
        it("Should call the profileSvc.favoriteBooks with no arguments", function () {
            expect(profileSvcSpy.favoriteBooks).toHaveBeenCalledWith();
        });

        it("Should set the $scope.favoriteBooks from the profileService", function () {
            expect($scope.favoriteBooks).toEqual(favoriteBooks);
        });
    });

});

AngularJS – Test Simple Binding With Protractor

describe("hello-protractor", function () {

  describe("index", function () {
    it("should display the correct title", function () {
      browser.get('/#');
      expect(browser.getTitle()).toBe('hello protractor');
    });

    it("should display the message when button clicked", function () {
      var button = element(by.id('button1')),
        message = element(by.binding('messageText'));

      button.click();

      expect(message.getText()).toBe('button 1 clicked');
    });
  });
});


{{ messageText }}

Código fonte das aulas 1 a 12 do curso egghead.oi

– Quando estamos usando o state podemos usar esse recurso:
HTML

Url Teste

– Criando um test:
JSSpec

describe(‘filter’, function(){
     beforeEach(module(‘myApp’));

     describe(‘reverse’, function() {
          it(’should reverse a string’, inject(function(reverseFilter) {
               expect(reverseFilter(‘ABCD’)).toEqual(‘DCBA’);
               expect(reverseFilter(‘John’)).toEqual(’nhoJ’);
          }))
     })
})

   

– uiRepeat com um filter:
JS

     
                                                                                                          
{{actor.name}}{{actor.character}}
     

– uiRepeat com filter, limitTo e orderBy:
HTML


– Diretivas em uma tag só:
HTML

     

JS

app.directive("superman", function() {
     return {
          restrict: "A",
          link: function() {
               alert("I'm working stronger");
          }
     };
});

app.directive("flash", function() {
     return {
          restrict: "A",
          link: function() {
               alert("I'm working faster");
          }
     };
});

AngularJS – Unit Testing Directive Scope Binding

app.js

var app = angular.module("app", []);

app.directive("ehSimple", function() {
    return {
        scope: {
            ehSimple: "="
      },
        link: linkFn
    }

    function linkFn(scope, element) {
        element.addClass("plain");

        element.bind("click", function() {
            scope.clicked = true;

            scope.ehSimple.message += " world";
        })
    }
})

directive.spec.js

describe("Hello world", function() {
    var element;
    var $scope;
    beforeEach(module("app"));
    beforeEach(inject(function($compile, $rootScope) {
        $scope = $rootScope;
        $scope.data = {message: "Hello"};
        element = angular.element("
{{2 + 2}}
"); $compile(element)($rootScope); })) it('should equal 4', function() { $scope.$digest(); expect(element.html()).toBe("4"); }) describe("ehSimple", function() { it("should add a class of plain", function() { expect(element.hasClass("plain")).toBe(true); }) it("should respond to a click", function() { browserTrigger(element, "click"); expect(element.isolateScope().clicked).toBe(true); }) it("should update both scopes on click", function() { browserTrigger(element, "click"); expect(element.isolateScope().ehSimple.message).toBe("Hello world"); }) }) })