Back

Explore Courses Blog Tutorials Interview Questions
0 votes
1 view
in DevOps and Agile by (19.7k points)

I am writing a test case for adding store information on the page for the Angular app using Protractor, where initially I am counting the number of stores I already have and after the test block is done I expect the count to increase by one.

  var items,startCount;

  var testPromise = function(){

    items = element.all(by.repeater('store in storelist'));

    var deferred = protractor.promise.defer();

    items.count().then(function(orgCount){

       startCount = orgCount;

       console.log('Start Count: '+ startCount); //prints correct value e.g, 6

    }, function(error){

       console.log(error);

    });

    return deferred.promise;

  };

it('should accept valid data for adding new store', function() {

   var cNum = null;

   testPromise().then(function(result){

      cNum = result;

      console.log('cNUm value: '+ cNum); //this value doesn't get printed in console

   });

   /* Code for adding test fields in store page */

   expect(items.count()).toBe(cNum+1);

 });

});

I expect the store count to be the same at the end of the test. count() is resolving a promise and the correct value of store count gets printed in testPromise() but in it block when I call testPromise().then method it never goes in that 'then' block

and the end result says

Message:

 Expected 6 to be 1.

 Stacktrace:

  Error: Failed expectation

I also researched a bit more in webdriver.promise.Promise() from this link http://selenium.googlecode.com/git/docs/api/javascript/class_webdriver_promise_Promise.htmland tried using that for creating a promise and resolving its value but not sure what the problem is. Either I get an error message saying 'expected 6 to be NaN' or 'expected 6 to be 1' Am I not resolving a promise or writing 'then' block correctly? Would appreciate some insights/help on this issue.

1 Answer

0 votes
by (62.9k points)

Creation

To create a promise in protractor, use the following code snippet:

var deferred = protractor.promise.defer();

var promise = deferred.promise;

Callbacks

The callbacks are invoked asynchronously.

You would be able to register one (or more) "on success" callbacks using the following code snippet:

promise.then(function() {

   ...

});

you can additionally register one (or more) "on error" callback:

 

promise.then(null, function() {

   ...

});

These registrations could be chained:

promise.then(function() {

   ...

}).then(function() {

   ...

}).then(null, function() {

   ...

}).then(function() {

 

}, function() {

   ...

}).then(onSuccess, onFailure);

Resolution

Success

The "on success" callbacks are invoked once the promise is resolved successfully:

 deferred.fulfill(value);

Failure

The "on failure" callbacks are invoked once the promise is resolved successfully:

deferred.reject(new Error('a problem occurs'));

In your code, you missed the resolution step. You have to fulfill the promise. A more complete reference is obtainable within the Webdriver.js documentation

Welcome to Intellipaat Community. Get your technical queries answered by top developers!

28.4k questions

29.7k answers

500 comments

94k users

Browse Categories

...