У меня возникли проблемы с выполнением асинхронных функций в тестах мокки. Я запускаю сервер узла в вызове beforeEach и цепляю клиентский сокет для подключения к нему перед выполнением каких-либо других операторов().Выполнение события синхронно в мокко
проблема - я получаю различные выходы с каждого мокко вызова
это мой мокко тест
// тестирование событий HTTPServer
import chai,{expect} from 'chai';
import sinon from 'sinon'
import SocketCluster from 'socketcluster-client';
import testServer from '../../server/server.js';
import net from 'net';
import chaiAsPromised from 'chai-as-promised';
function startServer(port){
return new Promise(function(resolve,reject){
resolve(testServer(port))
})
}
chai.use(chaiAsPromised)
describe('httpServer',() => {
var client;
var options = {
port: 4000
}
beforeEach(() => {
startServer(4000).then(() => {
console.log('Server started')
client = SocketCluster.connect(options)
})
})
it('should return Anonymous user if client doesnt send a valid JWT token on user_connected event',() => {
return client.emit('user_connected',{id_token:false},(err,data) => {
expect(data).to.eventually.be.a('string');
})
})
})
это выход из первый тестовый вызов
httpServer
Test server started on 4000
Server started
user connected
1) "before each" hook for "should return Anonymous user if client doesnt send a valid JWT token on user_connected event"
Main page
✓ should show a sign-in page if isAuthenticated is false (60ms)
✓ should show a welcome text if isAuthenticated is true
SignUp login
✓ should return isAuthenticated=false on SIGNUP_REQUEST
✓ should return isAuthenticated=true on SIGNUP_SUCCESS
✓ should return isAuthenticated=false and errorMessage on SIGNUP_FAILURE
5 passing (2s)
1 failing
1) httpServer "before each" hook for "should return Anonymous user if client doesnt send a valid JWT token on user_connected event":
Error: timeout of 2000ms exceeded. Ensure the done() callback is being called in this test.
это второй вывод вызова
httpServer
1) should return Anonymous user if client doesnt send a valid JWT token on user_connected event
Test server started on 4000
Server started
Main page
✓ should show a sign-in page if isAuthenticated is false (82ms)
✓ should show a welcome text if isAuthenticated is true
user connected
SignUp login
✓ should return isAuthenticated=false on SIGNUP_REQUEST
✓ should return isAuthenticated=true on SIGNUP_SUCCESS
✓ should return isAuthenticated=false and errorMessage on SIGNUP_FAILURE
5 passing (347ms)
1 failing
1) httpServer should return Anonymous user if client doesnt send a valid JWT token on user_connected event:
TypeError: Cannot read property 'emit' of undefined
at Context.<anonymous> (server.test.js:34:14)
, как вы можете видеть, журнал, связанный с «подключенным пользователем», происходит очень случайным образом. Как я могу контролировать это синхронно?
это работает .. но я не понимаю, почему .. есть ли что-нибудь, что я могу прочитать, чтобы очистить мои сомнения? – Kannaj
В моем последнем абзаце объясняется проблема: «Те же правила, которые применяются к асинхронному коду в тестах, применяются к асинхронному коду в перехватах. Вы должны вернуть обещание или вызвать выполненный обратный вызов». Теперь, если вы не знаете, как Mocha занимается асинхронными тестами, это проблема. [Этот ответ] (http://stackoverflow.com/a/20760704/1906307) может помочь. – Louis