suchen

Heim  >  Fragen und Antworten  >  Hauptteil

node.js – Fehler bei der asynchronen Ajax-Anforderungsaktion beim Testen von Mocha

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,麻烦各位给参谋参谋!拜谢
高洛峰高洛峰2752 Tage vor845

Antworte allen(1)Ich werde antworten

  • 迷茫

    迷茫2017-05-16 13:41:34

    首先,你这里面没有DOM环境,需要jsdom去模拟一个DOM环境。第二,即便你模拟了DOM环境,你也调用不了AJAX,因为对于你这个测试而言,压根没有服务器可以给你调用请求,除非你在这里又模拟一个mock服务器,这个我没试过。

    Antwort
    0
  • StornierenAntwort