Relatively new to Vuejs and testing its components. Using vue-test-utils and jest for testing. Getting following error test log
The .vue file consists of template, component and styling. Below is the part of the SignupLayout.vue that gets error -
<style lang="sass">
@import '../stylesheets/colors'
html[path="/signup"], html[path="/login"]
height: 100%
background-image: url("../assets/background.jpg")
background-size: cover
background-position: center
background-repeat: no-repeat
overflow: hidden
#signup-layout
#change-language-button
.lang-menu
color: $alto
</style>
Test File -
import Vue from 'vue';
import Vuex from 'vuex'
import SignupLayout from '../src/components/SignupLayout.vue';
import { mount, shallow, createLocalVue } from '@vue/test-utils';
const localVue = createLocalVue()
localVue.use(Vuex)
jest.resetModules()
describe('Signup.test.js', () => {
let cmp
let actions
let store
let getters
let state
beforeEach(() => {
state = {
email: 'abc@gmail.com'
}
getters = {
CURRENT_USER_EMAIL: state => state.email
}
store = new Vuex.Store({
getters
})
})
it('has received ["Login"] as the title property', () => {
cmp = shallow(SignupLayout, {
store,
localVue,
propsData: {
title: ['Login']
},
data: {
email: 'abc@dsf.com'
}
})
cmp.update()
expect(cmp.vm.title).toEqual(['Login'])
})
})
Confused as to what has $t got to do with sass. Any help would be appreciated. Stuck here for a while now. Let me know if more details needed. Thanks in advance
The error isn't in the
<style>
tag because Jest will compile your Vue component and extract the JS code. So you can ignore the line error for now (I'm not sure how to fix it).But based on your error message, the problem seems to be related to the use of vue i18n and you're missing it when declaring your Vue component in the test file. Try adding these lines to your test file:
This way you dont have to load the whole i18n library. You can even spy on the function with Sinon or
jest.fn()
if using Jest.Another way to mock the i18n library is mock it in a separate js file
and add it in Jest configuration
so if you have more components with resource imports you don't need to mock it separately.