Vue JS 애플리케이션의 API에서 데이터를 가져오는 테스트 코드
단위 테스트를 작성하려고 합니다.vue-test-utils
그리고.Jest
데이터 속성이 할당되어 있는지 여부를 확인할 수 있습니다.
코드는 다음과 같습니다.
created () {
this.loadGridAndContent()
},
methods: {
async loadGridAndContent () {
let result = await AppService.loadDashboard(this.userDetails.psref).catch(err => console.log(err))
this.dashBoardData = result.data[0]
this.dashBoardDataClone = JSON.parse(JSON.stringify(this.dashBoardData))
}
}
App Service는
import Api from '@/services/api.service'
export default {
async loadDashboard (psRef) {
return Api().get('/user/' + psRef + '/dashboard')
.catch(error => {
console.log(error)
})
},
async reorderDashboard (dashBoardOrderData) {
return Api().put('/user/favourites/reorderdashboard', { NewOrder: dashBoardOrderData })
.catch(error => {
console.log(error)
})
}
}
장난이에요.
export default {
loadDashboard: jest.fn(() => Promise.resolve([
{ db_name: 'Jobs', dxp_dashboardref: 1, dxp_hidden: 0, dxp_position: 1, dxp_ref: 926 },
{ db_name: 'Firms', dxp_dashboardref: 2, dxp_hidden: 0, dxp_position: 2, dxp_ref: 927 },
{ db_name: 'CRM', dxp_dashboardref: 5, dxp_hidden: 0, dxp_position: 3, dxp_ref: 987 }
]))
}
API.js는 다음과 같습니다.
import axios from 'axios'
export default () => {
return axios.create({
baseURL: ``,
withCredentials: false,
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
}
})
}
테스트는 다음과 같습니다.
describe('DashBoard component tests', () => {
let state
let store
let wrapper
beforeEach(() => {
state = {
auth: {
user: {
auids: '',
md_clock: 0,
md_picture: '',
ps_fname1: '',
ps_surname: '',
psname: 'Test Test',
psref: 0
}
}
}
store = new Vuex.Store({
state
})
wrapper = mount(Dashboard, {
localVue,
store
})
})
afterEach(() => {
wrapper.destroy()
})
it('it should assign dashBoardData to the result of AppService.loadDashboard', async () => {
// expect.assertions(1)
let dashBoardData = [
{ db_name: 'Jobs', dxp_dashboardref: 1, dxp_hidden: 0, dxp_position: 1, dxp_ref: 926 },
{ db_name: 'Firms', dxp_dashboardref: 2, dxp_hidden: 0, dxp_position: 2, dxp_ref: 927 },
{ db_name: 'CRM', dxp_dashboardref: 5, dxp_hidden: 0, dxp_position: 3, dxp_ref: 987 }
]
let resp = { data: dashBoardData }
console.log(loadDashboard.getMockImplementation)
loadDashboard.mockResolvedValue(resp)
//loadDashboard.mockImplementation(() => Promise.resolve(resp))
await flushPromises()
expect(wrapper.vm.dashBoardData).toEqual(dashBoardData)
})
})
본질적으로, 나는 내가 그 사람들을 조롱하고 있다고 생각한다.app.service
의 해결된 값을 확인한 후 약속을 기다리고 데이터 속성이 할당되었음을 확인합니다.하지만, 나는 내던져지고 있다.
'TypeError: 정의되지 않은 속성 '0'을 읽을 수 없습니다.
VueComponent.loadGridAndContent에서
(C:\WebApp\)WebApp_Vue_Frontend\src\views\dashboard\Dashboard.vue:93:1)가 처리 중입니다._tickCallback (내부/프로세스/다음_tick.js:68:7)'
왜 그런지 모르겠어요어떤 아이디어라도 주시면 감사하겠습니다.
해결책은 실제로 해결된 가치를 조롱하는 것이었습니다.loadDashboard
등의 기능
export default {
loadDashboard: jest.fn(() => Promise.resolve({ data: [
[
{ db_name: 'Jobs', dxp_dashboardref: 1, dxp_hidden: 0, dxp_position: 1, dxp_ref: 926 },
{ db_name: 'Firms', dxp_dashboardref: 2, dxp_hidden: 0, dxp_position: 2, dxp_ref: 927 },
{ db_name: 'CRM', dxp_dashboardref: 5, dxp_hidden: 0, dxp_position: 3, dxp_ref: 987 }
]
] }))
}
Axios 콜은 GET 요구이므로 다음 문서를 참조하십시오.
axios.get(url)
.then(function (response) {
// handle success
console.log(response);
})
.catch(function (error) {
// handle error
console.log(error);
})
.finally(function () {
// always executed
});
즉, 다음과 같이 콜백(또는 보다 현대적인 Promise)을 사용할 수 있습니다.
async loadDashboard (psRef, callback) {
Api().get('/user/' + psRef + '/dashboard')
.then(function(response){
callback(response.data);
})
.catch(error => {
console.log(error)
})
}
또한 방법을 변경합니다.
async loadGridAndContent () {
await AppService.loadDashboard(this.userDetails.psref, this.callback).catch(err => console.log(err))
}
callback(data){
this.dashBoardData = data[0]
this.dashBoardDataClone = JSON.parse(JSON.stringify(this.dashBoardData))
}
전체적으로 get()이 완료될 때까지 기다린 후 응답을 사용합니다.이 응답은 위의 코드로 이루어집니다.
도움이 되셨길 바랍니다.
제가 이 곳에 처음 왔기 때문에 혹시 실수가 있으면 말씀해 주세요.
언급URL : https://stackoverflow.com/questions/58502565/testing-code-that-fetches-data-from-api-in-a-vue-js-application
'programing' 카테고리의 다른 글
Vuex | 커밋 방식으로 전달할 수 있는 옵션은 무엇입니까? (0) | 2022.08.10 |
---|---|
open()이 잘못된 권한으로 파일을 만드는 이유는 무엇입니까? (0) | 2022.08.10 |
여러 개의 C 프로그램을 컴파일하기 위해 파일을 만드시겠습니까? (0) | 2022.07.21 |
Java에서 올바른 마이크로벤치마크를 작성하려면 어떻게 해야 하나요? (0) | 2022.07.21 |
Vuex의 getter 함수 내 getter 함수를 호출하는 방법 (0) | 2022.07.21 |