playwright/examples/mock-battery/tests/verify-calls.spec.js
2022-02-28 16:16:05 -08:00

40 lines
1.1 KiB
JavaScript

// @ts-check
const { test, expect } = require('@playwright/test');
let log = [];
test.beforeEach(async ({page}) => {
log = [];
// Expose function for pushing messages to the Node.js script.
await page.exposeFunction('logCall', msg => log.push(msg));
await page.addInitScript(() => {
const mockBattery = {
level: 0.75,
charging: true,
chargingTime: 1800, // seconds
dischargingTime: Infinity,
addEventListener: (name, cb) => logCall(`addEventListener:${name}`)
};
// Override the method to always return mock battery info.
window.navigator.getBattery = async () => {
logCall('getBattery');
return mockBattery;
};
// application tries navigator.battery first
// so we delete this method
delete window.navigator.battery;
});
})
test('verify battery calls', async ({ page }) => {
await page.goto('/');
await expect(page.locator('.battery-percentage')).toHaveText('75%');
// Ensure expected method calls were made.
expect(log).toEqual([
'getBattery',
'addEventListener:chargingchange',
'addEventListener:levelchange'
]);
});