Cypress-тест не запускается при импорте из исходного кода приложения CRA + TS - PullRequest
1 голос
/ 11 марта 2020

Один из моих тестов Cypress не запускается, когда он пытается импортировать из файла в исходном коде каталога create-реагировать-приложения sr c.

Тест выглядит так:

// cypress/integration/this-fails.js
import { MY_CONSTANT } from '../../src/constants';

describe('Cypress', () => {
  ...
})

Импортированный исходный файл выглядит следующим образом:

// src/constants.ts
export const MY_CONSTANT = 'foo';

Ошибка теста Cypress вызвана файлом теста Jest в исходном каталоге:

ERROR in /my-app/src/App.test.tsx(5,1)

Cannot find name 'test'. Do you need to install type definitions for a test runner? Try`npm i @types/jest`or`npm i @types/mocha`.

Тип Jest определения установлены. Кроме того, безрезультатно, я пытался исключить проблемный c Jest тест в Cypress tsconfig.

// cypress/tsconfig.json
{
  ...
  "exclude": [
    "../src/App.test.tsx"
  ],
  ...
}

Вот минимальное репо, которое воспроизводит мою проблему .

Наконец, чтобы выяснить, почему я импортирую вещи в тесты Cypress из исходного каталога - импортируемая переменная должна быть селектором DOM или функцией, которая возвращает селектор DOM, чтобы селекторы не были жестко закодированы в тестах.

1 Ответ

1 голос
/ 12 марта 2020

Я не уверен, почему сообщение TypeScript не выдает никаких выходных данных для /my-app/src/constants.ts, это, похоже, указывает на то, что файл доступен для чтения, и машинопись пытается его проанализировать, и не распознает синтаксис.

Однако я предполагаю, что код теста выполняется в процессе браузера и не может получить доступ к файлам вне своей папки.

Если constant.ts находится в cypress/fixtures, это работает, поэтому одним простым способом является добавление сценария для копирования файла. Сценарий с именем «precypress» будет автоматически запускаться при вызове сценария «cypress».

Это примерно 90% - вы не получите перезагрузку горячего модуля при изменении constants.ts.

пакет. json

"scripts": {
  ...
  "precypress": "copyfiles ./src/constants.ts ./cypress/fixtures",
  "cypress": "cypress open"
},

Работает также с функциями и ручками набора текста,

test

import { MY_CONSTANT, getMyConstant } from '../fixtures/src/constants';

describe('Cypress', () => {

  it('is working', () => {
    cy.visit('/')
    alert(MY_CONSTANT);
    alert(getMyConstant());
    expect(true).to.equal(true)
  })
})

constant.ts

export const MY_CONSTANT: Number = 10;

export const getMyConstant: Function = () => 20;
...