我的代码为,
public async waitForElementSelected(element: WebdriverIO.Element) {
/**
* Maximum number of milliseconds to wait for
* @type {Int}
*/
const ms = 10000;
await browser.waitUntil(async () =>{
return element.isSelected();
},{
timeout: ms,
timeoutMsg: 'Condition not met: Element is not selected',
interval: 100
});
}
在这里,我很容易通过模拟浏览器来测试wait until,但是我不能模拟"isSelected"或element.isSelected ();线。
我试过了,嘲笑
global.element = {
isSelected: jest.fn()
};
但是它没有像预期的那样工作,并且给出element.isSelected()行仍然没有覆盖。
下面是我的测试用例
describe('waitForElementToBeSelected', () => {
beforeEach(() => {
mockElement = {
isSelected: jest.fn()
};
mockElement.isSelected.mockReturnValue(true);
/** **browser mock section ***/
// global.browser = {
// waitUntil: ()=> {
// mockElement.isSelected();
// }
// };
});
it('should call waitForElementSelected on the browser object', async () => {
await waitActions.waitForElementToBeSelected(mockElement);
expect(mockElement.isSelected).toHaveBeenCalled();
//
//expect(global.browser.waitUntil).toHaveBeenCalledTimes(1);
});
});
这段代码给了我一个错误,"浏览器未定义"。如果我启用了代码,/** **浏览器模拟节***/然后,我得到了line
return element.isSelected()
仍然没有得到覆盖。
这是因为element
不是全局变量,而是传递给waitForElementSelected
函数的参数。您需要做的是在调用它时传递一个带有mock函数的对象。
所以在你的测试中,你可以这样做:
// mock out the element
const mockElement = {
isSelected: jest.fn()
};
// mock out the promise response
mockElement.isSelected.mockReturnValue(new Promise((resolve) => resolve(true)));
// call the function
waitForElementSelected(mockElement);
// expect
expect(mockElement.isSelected).toHaveBeenCalled();