2017-03-20 2 views
3

je la fonction suivante qui échoue sur l'exécution:Tapuscrit Erreur: Argument de type « nombre » est incessible au paramètre de type « attendu <Promise <number>> »

it('should show three items',() => { 
    const EXPECTED_NUMBER_OF_ITEMS: number = 3; 
    const countOfTabElements: Promise<number> = page.listOfTabs.count(); 
    expect(countOfTabElements).toBe(EXPECTED_NUMBER_OF_ITEMS); 
}); 

Il jette l'erreur suivante lorsque i l'exécuter:

Argument of type 'number' is not assignable to parameter of type 'Expected>'. (2345)

Des idées pourquoi?

+1

Il est clair de l'erreur 'page.listOfTabs.count()' retourne le nombre, mais 'countOfTabElements' est déclaré que le type' 'Promise . – Tushar

Répondre

4

Essayez:

it('should show three items',() => { 
    const EXPECTED_NUMBER_OF_ITEMS: number = 3; 
    page.listOfTabs.count().then(value => { 
     expect(value).toBe(EXPECTED_NUMBER_OF_ITEMS); 
    }); 
}); 
+0

Oui, compris. –

7

Alternativement à @Nitzan Tomer réponse que vous devriez être en mesure d'utiliser async/await (TS> = 2.1 pour le ciblage ES5)

it('should show three items', async() => { 
    const EXPECTED_NUMBER_OF_ITEMS: number = 3; 
    const value = await page.listOfTabs.count(); 
    expect(value).toBe(EXPECTED_NUMBER_OF_ITEMS); 
}); 

(comme une note de côté I je crois que vous avez besoin d'une version assez récente de Mocha pour gérer le rejet de promesse correctement)

+0

Cela aiderait aussi, je pense, mais attendre ne peut être utilisé async, non? –

+0

Oui; mais async/wait est vraiment une syntaxe alternative à promettre.then.catch –

+0

Merci Bruno, va certainement y jeter un oeil –

0

Je dirais d'utiliser async et attendre de gérer l'objet promesse avec un minimum de changements de code.

// no changes to page.po.ts. handle async and await in .spec.ts file 
import {browser, by, element} from 'protractor'; 

export class HomePage { 

    navigateTo() { 
    return browser.get('/'); 
    } 

    getParagraphText() { 
    return element(by.css('cfs-root h1')).getText(); 
    } 

} 

//page.e2e-spec.ts 
import {HomePage} from './home.po'; 

describe('ng-app App',() => { 
    let page: HomePage; 

    beforeEach(() => { 
    page = new HomePage(); 
    }); 

    it('should display the page heading.', async() => { // notice the callback is a async function 
    page.navigateTo(); 
    expect(await page.getParagraphText()).toBe('cfs works!'); //here we are using await to handle the promise 
    page.getHomeSearchHeading().then((text) => { 
     expect(text).toEqual('Universal Data Catalog'); 
    }); 
    }); 

});