2017-03-20 3 views
3

Ich habe die folgende Funktion, die auf die Ausführung fehlschlägt:Typoskript Fehler: Argument vom Typ ‚Zahl‘ ist zu Parameter des Typs nicht belegbar ‚Erwartete <Versprechen <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); 
}); 

Es wird folgendes Fehler auslöst, wenn i führe es aus:

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

Irgendwelche Ideen warum?

+1

Aus dem Fehler klar ist, dass 'page.listOfTabs.count()' Gibt die Anzahl aber 'countOfTabElements' als Typ' Versprechen 'erklärt. – Tushar

Antwort

4

Versuchen:

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

Ja, verstanden. –

7

Alternativ zu @Nitzan Tomer beantworten sollten Sie in der Lage sein, async zu verwenden/await (TS> = 2.1 für ES5 Targeting)

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); 
}); 

(als Randnotiz I glaube, dass Sie eine ziemlich neue Version von Mocha benötigen, um die Ablehnung von Versprechen korrekt zu behandeln)

+0

Das würde auch helfen, denke ich, aber erwarten kann nur async verwendet werden, oder? –

+0

Ja; aber async/warte wirklich ist eine alternative syntax zu versprechen.then.catch –

+0

Dank Bruno, wird auf jeden Fall einen Blick darauf werfen –

0

Ich würde sagen, async zu verwenden und darauf warten, Versprechen-Objekt mit minimalen Codeänderungen zu behandeln.

// 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'); 
    }); 
    }); 

}); 
Verwandte Themen