嘲弄回调或嵌套函数



我的代码为,

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

最新更新