Исходная структура папок выглядит следующим образом:
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, потому что компонент является мелко установленным.Кто-нибудь может дать объяснение?