recherche

Maison  >  Questions et réponses  >  le corps du texte

node.js - erreur d'action de demande asynchrone ajax de test moka

Lorsque mocha teste une action asynchrone avec une requête ajax, la console signale une erreur Impossible de lire la propriété 'document' d'une valeur indéfinie. Le code est le suivant :
/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 Il y a quelques jours844

répondre à tous(1)je répondrai

  • 迷茫

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

    Tout d’abord, vous n’avez pas d’environnement DOM ici, vous avez besoin de jsdom pour simuler un environnement DOM. Deuxièmement, même si vous simulez l'environnement DOM, vous ne pouvez pas appeler AJAX, car pour votre test, aucun serveur ne peut faire de requêtes pour vous, à moins que vous ne simuliez ici un serveur fictif, ce que je n'ai pas essayé.

    répondre
    0
  • Annulerrépondre