Задать вопрос
@AndreySFN

Почему jest так реагирует на import?

Разрабатываю приложение через create-react-app.
Сегодня попробовал написать свой первый тест. При страте теста получаю сообщение о том, что тестам не удалось запуститься и многв букав, среди которых
SyntaxError: Cannot use import statement outside a module

Вот код теста
import {createLastOnlineDescription} from './OnlineStatus'
import { create } from 'domain'

function twoChar(number){
    if(String(number).length==1)
        return `0${number}`
    else 
        return number
}

describe("createLastOnlineDescription for header online status test",()=>{
    describe('it shuld return `только что`',()=>{
        test('input now',()=>{
            const input = new Date()
            const result = createLastOnlineDescription(input)
            expect(result).toEqual('только что')
        })
        test('input 1 minute ago',()=>{
            const input = new Date(new Date()-60000)
            const result = createLastOnlineDescription(input)
            expect(result).toEqual('только что')
        })
        test('input 2 minute ago',()=>{
            const input = new Date(new Date()-120000)
            const result = createLastOnlineDescription(input)
            expect(result).toEqual('только что')
        })
        test('input 3 minute ago',()=>{
            const input = new Date(new Date()-180000)
            const result = createLastOnlineDescription(input)
            expect(result).toEqual('только что')
        })
        test('input 4 minute ago',()=>{
            const input = new Date(new Date()-240000)
            const result = createLastOnlineDescription(input)
            expect(result).toEqual('только что')
        })
    })


    describe('should return n `минут назад`',()=>{
        test('input 6 minutes ago',()=>{
            const input = new Date(new Date()-360000)
            const result = createLastOnlineDescription(input)
            expect(result).toEqual('6 минут назад')
        })
        test('input 45 minutes ago',()=>{
            const input = new Date(new Date()-2700000)
            const result = createLastOnlineDescription(input)
            expect(result).toEqual('45 минут назад')
        })
        test('input 59 minutes ago',()=>{
            const input = new Date(new Date()-3540000)
            const result = createLastOnlineDescription(input)
            expect(result).toEqual('59 минут назад')
        })
    })


    describe('should return `час назад`',()=>{
        test('input 60 minutes ago',()=>{
            const input = new Date(new Date()-3600000)
            const result = createLastOnlineDescription(input)
            expect(result).toEqual('час назад')
        })
        test('input 70 minutes ago',()=>{
            const input = new Date(new Date()-4200000)
            const result = createLastOnlineDescription(input)
            expect(result).toEqual('час назад')
        })
        test('input 74 minutes ago',()=>{
            const input = new Date(new Date()-4440000)
            const result = createLastOnlineDescription(input)
            expect(result).toEqual('час назад')
        })
    })

    describe('should return `сегодня в...`',()=>{
        test('input 1 hour 16 minutes ago',()=>{
 
            const input = new Date(new Date()-4560000)

            const result = createLastOnlineDescription(input)

            const resultHour = input.getHours()
            const resultMinutes = input.getMinutes()
            expect(result).toEqual(`сегодня в ${twoChar(resultHour)}:${twoChar(resultMinutes)}`)
        })
        test('input 1 hour 59 minutes ago',()=>{
            const input = new Date(new Date()-7140000)

            const result = createLastOnlineDescription(input)

            const resultHour = input.getHours()
            const resultMinutes = input.getMinutes()
            expect(result).toEqual(`сегодня в ${twoChar(resultHour)}:${twoChar(resultMinutes)}`)
        })
    })
})


OnlineStatus.jsx
export function createLastOnlineDescription(lastOnlineDatetime){
    if(lastOnlineDatetime === 'online')
        return 'online'
    const timeDifference = new Date() - new Date(lastOnlineDatetime)
    if(timeDifference<300000)
        return `только что`
    if (timeDifference<3600000) 
        return `${timeDifference / 60000} минут назад` 
    if(timeDifference<4500000) 
        return `час назад`
    if(timeDifference<7200000) 
        return timeConverter(lastOnlineDatetime)

    function timeConverter(UNIX_timestamp){
        const a = new Date(UNIX_timestamp * 1000);
        const months = ['января','февраля','марта','апреля','мая','июня','июля','августа','сентября','октября','ноября','декабря'];
        const month = months[a.getMonth()];
        const date = a.getDate();
        const hour = twoChar(a.getHours());
        const min = twoChar(a.getMinutes());

        if (a.setHours(0,0,0,0) === (new Date()).setHours(0,0,0,0))
            return `сегодня в ${hour}:${min}`;
    


        function twoChar(number){
            if(String(number).length==1)
                return `0${number}`
            else 
                return number
        }
    }
}


package.json
{
  "name": "sberbank-project",
  "version": "0.1.0",
  "private": true,
  "dependencies": {
    "react": "^16.12.0",
    "react-dom": "^16.12.0",
    "react-redux": "^7.1.3",
    "react-scripts": "3.2.0",
    "redux": "^4.0.4"
  },
  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "jest",
    "eject": "react-scripts eject"
  },
  "eslintConfig": {
    "extends": "react-app"
  },
  "browserslist": {
    "production": [
      ">0.2%",
      "not dead",
      "not op_mini all"
    ],
    "development": [
      "last 1 chrome version",
      "last 1 firefox version",
      "last 1 safari version"
    ]
  },
  "devDependencies": {
    "jest": "^24.9.0"
  }
}
  • Вопрос задан
  • 11530 просмотров
Подписаться 1 Средний Комментировать
Решения вопроса 1
@AndreySFN Автор вопроса
Нашёл решение здесь: https://stackoverflow.com/questions/35756479/does-...
Для тех, кому лень переходить по ссылке, вкратце, добавил в корень проекта файл ".babelrc" с содержанием
{
  "env": {
    "test": {
      "plugins": ["@babel/plugin-transform-modules-commonjs"]
    }
  }
}


После чего установил es2015 transform plugin
npm install --save-dev @babel/plugin-transform-modules-commonjs
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
miraage
@miraage
Старый прогер
Не могу понять, где используется "import { create } from 'domain'". Более того, вроде как, это модуль nodejs, который не надо использовать в тестах.
Попробуйте убрать эту строчку.
Ответ написан
мне хватило просто создать `.babelrc`, спасибо за решение!
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы