Тест Jest проходит локально, но не проходит в azure devops - PullRequest
0 голосов
/ 14 февраля 2020

У меня есть приложение реагирования, использующее реагирующие скрипты 3.2.0

Это мой тест:

jest.mock('./../shared/utils/getRequestWithDispatchUsing', () => ({
  __esModule: true,
  default: () => () => () => () => 'getRequestWithDispatchUsing is success',
}));

  describe('getContractsUsing', () => {
    const dispatch = jest.fn(action => action);
    const fetch = jest.fn();
    const clientNumber = 'clientNumber';
    beforeEach(() => {
      jest.clearAllMocks();
    });

    it('should perform getRequestWithDispatchUsing', () => {
      const actualContract = getContractsUsing(fetch, clientNumber)(dispatch);
      expect(actualContract).toEqual('getRequestWithDispatchUsing is success');
    });
  });

И это моя функция:

export const getContractsUsing = (fetch, clientNumber) => dispatch => {
  const apiContractsUrl = getContractsApiUrl();
  const body = {
    customerNumber: clientNumber,
  };

  return getRequestWithDispatchUsing(fetch)({
    url: apiContractsUrl,
    body,
    featureName: SELECT_CONTRACTS_NAVIGATION,
  })(dispatch)(contractsRequested, contractsReceived, contractsRequestFailed);
};

Тест отлично работает локально, но не работает в Azure DevOps. Хотя я устанавливаю те же зависимости в CI, используя npm ci.

мой пакет. json:

{
  "name": "app",
  "version": "2.3.1",
  "private": true,
  "jest": {
    "collectCoverageFrom": [
      "**/*.{js,jsx}",
      "!**/index.{js,jsx}",
      "!**/*.{stories.js,demo.js}",
      "!**/build/**",
      "!**/mocks/**",
      "!**/coverage/**",
      "!**/node_modules/**",
      "!src/setupTests.js"
    ],
    "snapshotSerializers": [
      "enzyme-to-json/serializer"
    ]
  },
  "dependencies": {
    "analytics-js": "^0.2.0",
    "classnames": "^2.2.5",
    "currency-formatter": "^1.4.2",
    "lodash": "^4.17.15",
    "moment": "^2.22.1",
    "mw.validation": "^1.0.9",
    "prop-types": "^15.6.1",
    "raf": "^3.4.0",
    "react": "^16.12.0",
    "react-scripts": "~3.2.0",
    "react-app-polyfill": "^1.0.5",
    "react-cookies": "^0.1.0",
    "react-datepicker": "~1.4.0",
    "react-dom": "^16.12.0",
    "react-moment-proptypes": "^1.5.0",
    "react-redux": "^5.0.5",
    "react-router": "^4.2.0",
    "react-router-dom": "^4.1.1",
    "react-scroll": "^1.7.9",
    "react-transition-group": "^2.2.1",
    "recompose": "^0.26.0",
    "redux": "^3.6.0",
    "redux-persist": "^5.9.1",
    "redux-thunk": "^2.2.0",
    "url-search-params-polyfill": "^4.0.0"
  },
  "devDependencies": {
    "@storybook/addon-actions": "^5.0.0",
    "@storybook/addon-links": "^5.0.0",
    "@storybook/addons": "^5.0.0",
    "@storybook/react": "^5.0.0",
    "bluebird": "^3.5.2",
    "concurrently": "^3.5.0",
    "enzyme": "^3.9.0",
    "enzyme-adapter-react-16": "^1.15.1",
    "enzyme-to-json": "^3.4.3",
    "eslint-config-airbnb": "^15.1.0",
    "eslint-config-prettier": "2.6.0",
    "eslint-plugin-import": "^2.8.0",
    "eslint-plugin-jsx-a11y": "^5.1.1",
    "eslint-plugin-prettier": "^2.3.1",
    "eslint-plugin-react": "^7.5.1",
    "husky": "^0.14.3",
    "istanbul": "^0.4.5",
    "jest-fetch-mock": "^2.1.2",
    "lint-staged": "^4.3.0",
    "node-sass": "^4.9.2",
    "prettier": "^1.8.2",
    "redux-mock-store": "^1.5.4",
    "webpack-bundle-analyzer": "^3.3.2"
  },
  "scripts": {
    "test": "react-scripts test --env=jsdom",
    "test-coverage": "react-scripts test --env=jsdom --coverage --watchAll=false",
  },
  "eslintConfig": {
    "extends": "react-app"
  },
  "engines": {
    "node": ">=12.0.0",
    "npm": ">=6.0.0"
  },
  "browserslist": [
    ">0.2%",
    "ie 11",
    "not dead",
    "not op_mini all"
  ]
}

вот журнал неудачного теста в CI:

getContractsUsing ›должен выполнить getRequestWithDispatchUsing

Ожидается (получено) .toEqual (ожидается) // глубокое равенство

Ожидается:« getRequestWithDispatchUsing is success »Получено: {}

 183 |     it('should perform getRequestWithDispatchUsing', () => {
 184 |       const actualContract = getContractsUsing(fetch, clientNumber)(dispatch);
 185 |       expect(actualContract).toEqual('getRequestWithDispatchUsing is success');
     |                              ^
 186 |     });
 187 |   });
 188 | });

 at Object.<anonymous> (src/SelectContracts/SelectContracts.actions.spec.js:185:30)

Редактировать Вот моя версия узла

node -p process.versions
{
  node: '12.14.0',
  v8: '7.7.299.13-node.16',
  uv: '1.33.1',
  zlib: '1.2.11',
  brotli: '1.0.7',
  ares: '1.15.0',
  modules: '72',
  nghttp2: '1.39.2',
  napi: '5',
  llhttp: '1.1.4',
  http_parser: '2.8.0',
  openssl: '1.1.1d',
  cldr: '35.1',
  icu: '64.2',
  tz: '2019c',
  unicode: '12.1'
}

1 Ответ

0 голосов
/ 24 февраля 2020

По некоторым причинам в CI jest.mock не работает. Мне пришлось изменить путь пакета, чтобы он работал. Это сложно, потому что вам нужно попробовать несколько комбинаций, прежде чем заставить их работать в CI, хотя все они работают локально. В моем случае я использовал:

jest.mock('./../shared/utils', () => ({
  __esModule: true,
  default: () => () => () => () => 'getRequestWithDispatchUsing is success',
}));

PS: я использую Azure Devops с WindowsBuild

...