2017-03-20 121 views
3

我有以下功能,其将失败上执行:打字稿错误:类型“数字”的参数是不能分配给类型的参数“预期<无极<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); 
}); 

它引发以下错误,当我执行它:

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

任何想法为什么?

+1

这是从错误中明确指出'page.listOfTabs.count()'返回号码,但'countOfTabElements'被声明为类型'无极'。 – Tushar

回答

4

尝试:

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

是的,理解。 –

7

或者到@Nitzan Tomer的回答,你应该能够使用异步/的await(TS> = 2.1靶向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); 
}); 

(作为一个方面说明我相信你需要一个相当新的摩卡版本才能正确地处理承诺拒绝)

+0

我认为这也有帮助,但等待只能使用异步,对不对? –

+0

是的;但异步/等待真的是一个可选的语法promise.then.catch –

+0

谢谢布鲁诺,一定会看看那个 –

0

我会说要使用异步并等待以最小的代码更改处理承诺对象。

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

}); 
相关问题