#javascript #jestjs #electron #electron-forge #spectron
#javascript #jestjs #электрон #электронная кузница #spectron
Вопрос:
Я хочу создавать тесты в своем репозитории (https://github.com/DWboutin/jest-spectron-ts ) кажется, все работает, но я не могу получить доступ к API Application.client в своих тестах.
Я пробовал в стиле Promises, async / await, с Mocha, и я не могу заставить его работать.
Это мой единственный тестовый файл (очень простой)
const path = require("path");
const Application = require("spectron").Application;
const electron = require("electron");
jest.setTimeout(10000); // increase to 50000 on low spec laptop
let app: any = new Application({
path: electron,
args: [path.join(__dirname, "..", ".webpack", "main", "index.js")]
});
describe("test", () => {
beforeAll(async () => {
await app.start();
});
afterAll(async () => {
if (app amp;amp; app.isRunning()) {
await app.stop();
}
});
it("shows an initial window", async () => {
const windowCount = await app.client.getWindowCount();
expect(windowCount).toBe(1); // this gives 2, I don't know why
});
it("should have correct text", async () => {
const h1Text = await app.client.getText("h1"); // TypeError: app.client.getText is not a function
expect(h1Text).toEqual("Hello World!");
});
});
Может кто-нибудь мне помочь, пожалуйста?
Ответ №1:
Что касается вашего комментария о windowCount
бытии 2
, см. Последний комментарий в этом разделе документации.
// Пожалуйста, обратите внимание, что getWindowCount() вернет 2, если
dev tools
они открыты.
Я не знаю, открыты ли devtools или нет, но, похоже, на данный момент это официальное обоснование.
Что касается app.client.getText
того, что это не функция, это потому, что это не функция. На самом деле кажется, что документация неверна — возможно, не обновлена с версии 11.0.0 до версии 11.1.0 и забыта.
Spectron использует WebdriverIO и предоставляет управляемое
client
свойство для созданных экземпляров приложения. Клиентский API являетсяbrowser
объектом WebdriverIO.
Источник: https://github.com/electron-userland/spectron#client
browser
Объект для WebdriverIO не содержит getText
функции (https://webdriver.io/docs/api.html ), однако извлеченный элемент действительно имеет рассматриваемую getText
функцию.
Это должно решить вашу проблему:
it("should have correct text", async () => {
// because there are "two" windows...
await app.client.windowByIndex(1);
// use query selector to get h1
const header = await app.client.$("h1");
// grab the text from the element
const h1Text = await header.getText();
expect(h1Text).toEqual("💖 Hello World!");
});
Этот модульный тест в репозитории spectron указал мне правильное направление для этого решения.
Приветствия.
Ответ №2:
Вот что-то еще, что может просто работать для других.
Вы используете неверное утверждение. Вы хотите использовать:
expect(headerText).to.equal("Hello World!");
Попробуйте что-то вроде этого:
it("Check - Header Text", async function () {
const headerElement = await app.client.$("h1");
let headerText = await headerElement.getText();
expect(headerText).to.equal("Hello World!");
});
Если вы столкнетесь с ошибкой с помощью expect(), не возражайте добавить и это:
const expect = require('chai').expect