Wenn Mocha eine asynchrone Aktion mit einer Ajax-Anfrage testet, meldet die Konsole den Fehler „Eigenschaft „Dokument“ kann nicht gelesen werden“ Der Code lautet wie folgt:
/counter.js/
import $ from "../componet/jquery.min.js"
export const CHANGE_USERNAME_ERROR = 'CHANGE_USERNAME_ERROR'
export function checkUsername (name) {
return (dispatch) => {
$.get('/check', {username: name}, (msg) => {
dispatch({
type: CHANGE_USERNAME_ERROR,
error: msg
})
})
}
}
/counter.test.js/
import { expect } from 'chai'
import sinon from 'sinon'
import * as Actions from '../../public/javascripts/actions/counter';
describe('actions/register', () => {
let actions
let dispatchSpy
let getStateSpy
let xhr
let requests
beforeEach(function() {
actions = []
dispatchSpy = sinon.spy(action => {
actions.push(action)
})
xhr = sinon.useFakeXMLHttpRequest()
requests = []
xhr.onCreate = function(xhr) {
requests.push(xhr);
};
})
afterEach(function() {
xhr.restore();
});
describe('Action: checkUsername', () => {
it('Should call dispatch CHANGE_USERNAME_ERROR.', () => {
Actions.checkUsername('foo@bar')(dispatchSpy)
const body = '不能含有特殊字符'
// 手动设置 ajax response
requests[0].respond(200, {'Content-Type': 'text/plain'}, body)
expect(actions[0]).to.have.property('type', Actions. CHANGE_USERNAME_ERROR)
expect(actions[0]).to.have.property('error', '不能含有特殊字符')
})
})
})
报的是jquery.min.js中的错误,我是在控制台跑的mocha,麻烦各位给参谋参谋!拜谢
首先,你这里面没有DOM环境,需要jsdom去模拟一个DOM环境。第二,即便你模拟了DOM环境,你也调用不了AJAX,因为对于你这个测试而言,压根没有服务器可以给你调用请求,除非你在这里又模拟一个mock服务器,这个我没试过。