redux-devtools/extension/test/chrome/extension.spec.js

89 lines
2.7 KiB
JavaScript
Raw Normal View History

import { resolve } from 'path';
import webdriver from 'selenium-webdriver';
import chromedriver from 'chromedriver';
import { switchMonitorTests, delay } from '../utils/e2e';
const port = 9515;
const path = resolve('build/extension');
const extensionId = 'lmhkpmbekcpmknklioeibfkpmmfibljd';
const actionsPattern = /^@@INIT(.|\n)+@@reduxReactRouter\/routerDidChange(.|\n)+@@reduxReactRouter\/initRoutes(.|\n)+$/;
describe('Chrome extension', function () {
beforeAll(async () => {
chromedriver.start();
await delay(2000);
this.driver = new webdriver.Builder()
.usingServer(`http://localhost:${port}`)
.withCapabilities({
chromeOptions: {
args: [`load-extension=${path}`],
},
})
.forBrowser('chrome')
.build();
});
afterAll(async () => {
await this.driver.quit();
chromedriver.stop();
});
it("should open extension's window", async () => {
await this.driver.get(`chrome-extension://${extensionId}/window.html#left`);
const url = await this.driver.getCurrentUrl();
expect(url).toBe(`chrome-extension://${extensionId}/window.html#left`);
});
it('should match document title', async () => {
const title = await this.driver.getTitle();
expect(title).toBe('Redux DevTools');
});
it("should contain inspector monitor's component", async () => {
const val = await this.driver
.findElement(webdriver.By.xpath('//div[contains(@class, "inspector-")]'))
.getText();
expect(val).toBeDefined();
});
it('should contain an empty actions list', async () => {
const val = await this.driver
.findElement(
webdriver.By.xpath('//div[contains(@class, "actionListRows-")]')
)
.getText();
expect(val).toBe('');
});
Object.keys(switchMonitorTests).forEach((description) =>
it(description, switchMonitorTests[description].bind(this))
);
it('should get actions list', async () => {
const url = 'http://zalmoxisus.github.io/examples/router/';
await this.driver.executeScript(`window.open('${url}')`);
await delay(2000);
const tabs = await this.driver.getAllWindowHandles();
await this.driver.switchTo().window(tabs[1]);
expect(await this.driver.getCurrentUrl()).toMatch(url);
await this.driver.manage().timeouts().pageLoadTimeout(5000);
await this.driver.switchTo().window(tabs[0]);
const result = await this.driver.wait(
this.driver
.findElement(
webdriver.By.xpath('//div[contains(@class, "actionListRows-")]')
)
.getText()
.then((val) => {
return actionsPattern.test(val);
}),
15000,
"it doesn't match actions pattern"
);
expect(result).toBeTruthy();
});
});