Почему выдается эта ошибка: «ReferenceError: SHA256 не определено» в тесте spec.js - PullRequest
0 голосов
/ 25 сентября 2019

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

src/ -> snapshots/ -> feedbackLink.js -> feedbackLink.spec.js -> index.js -> initOpinionLab.js

vendor/ -> oo_engine.js

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

в index.js У меня было:

import '../vendor/oo_engine'

export { default } from './feedbackLink'

, и при работе с пряжей не было сбоев.

Когда я сбрасывал файл index.js для уменьшения,Я просто переместил import '../vendor/oo_engine' в строку 2 feedbackLink.js, и теперь возникает следующая ошибка:

src / feedbackLink.js

● Не удалось запустить набор тестов

ReferenceError: SHA256 is not defined

  778 |   }());
  779 |   (function () {
> 780 |     SHA256 = {};
      |           ^
  781 | 
  782 |     SHA256.K = [
  783 |       0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b,

  at vendor/oo_engine.js:780:11
  at vendor/oo_engine.js:779:4
  at factory (vendor/oo_engine.js:14:16)
  at Object.<anonymous> (vendor/oo_engine.js:10:2)
  at Object.<anonymous> (src/feedbackLink.js:2:1)
  at Object.<anonymous> (src/feedbackLink.spec.js:1:1)

Файл вендора, oo_engine.js, представляет собой сторонний файл, который представляет собой гигантский IIFE, и в строке 780 здесь указывается ошибка.

(function () {
    SHA256 = {};

  SHA256.K = [
  0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b,
  0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01,
  0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7,
  0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,
  0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152,
  0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147,
  0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc,
  0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
  0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819,
  0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08,
  0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f,
  0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,
  0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2];
  ... and so on with added properties to the SHA object.

Наконец, мой feedback.spec.js выглядит следующим образом

import FeedbackLink from './feedbackLink'
import { shallowMount } from '@vue/test-utils'

jest.mock('./initOpinionLab', () => jest.fn())

describe('FeedbackLink', () => {
  global.OOo = {
    inlineFeedbackShow: jest.fn()
  }
  const wrapper = shallowMount(FeedbackLink, {
    propsData: {
      linkText: 'Feedback',
      clientId: 'abc12345',
      flow: 'NEW_USER',
      srcCorrelationId: 'xyz9876'
    }
  })
  it('[positive] should render correct contents', () => {
    expect(wrapper.html()).toMatchSnapshot()
  })
  it('[positive] when user clicks `FeedBack`, launchOpinionLab is called', () => {
    wrapper.find('a').trigger('click')
    expect(global.OOo.inlineFeedbackShow).toHaveBeenCalled()
  })
})

и feedbackLink.js

import initOpinionLab from './initOpinionLab'
import '../vendor/oo_engine'

export default {
  name: 'FeedbackLink',
  props: {
    clientId: {
      type: String,
      default: null
    },
    flow: {
      type: String,
      default: null
    },
    linkText: {
      type: String,
      default: 'Feedback'
    },
    srcCorrelationId: {
      type: String,
      default: null
    }
  },
  methods: {
    launchOpinionLab () {
      initOpinionLab({
        clientId: this.clientId,
        flow: this.flow,
        srcCorrelationId: this.srcCorrelationId
      })
      window.OOo.inlineFeedbackShow()
    }
  },
  template: '<a @click="launchOpinionLab">{{ linkText }}</a>'
}

Почему у меня возникает эта ошибка?Я подозреваю, что jest, мой тестовый организатор или vue / test-utils не могут проанализировать oo_engine.js IIFE, потому что компонент является мелко установленным.Кто-нибудь может дать объяснение?

...