Здесь есть две проблемы
setData
setData
вызывается в обратном вызове Promise
.
Как только Promise
разрешается, все обратные вызовы, ожидающие его, ставятся в очередь в очереди PromiseJobs . Все ожидающие задания в очереди PromiseJobs запускаются после завершения текущего сообщения и до начала следующего сообщения .
В этом случае текущее работающее сообщение - это ваш тест, поэтому ваш тест завершается до того, как обратный вызов Promise
сможет его выполнить, и setData
не вызывается до после вашего теста завершается.
]
Вы можете исправить это, используя что-то вроде setImmediate
, чтобы отложить ваши утверждения до тех пор, пока не будут запущены обратные вызовы в PromiseJobs.
Похоже, вам также нужно вызвать component.update()
для повторного рендеринга компонента с новым состоянием. (Я предполагаю, что это потому, что изменение состояния происходит вне act
, поскольку нет никакого способа обернуть этот код обратного вызова в act
.)
Все вместе, рабочий тест выглядит например:
it('should render a proper table data', done => {
const mock = new MockAdapter(axios);
mock.onGet('/path/to/api').reply(200, response.data);
const component = mount( );
setImmediate(() => {
component.update();
console.log(component.debug());
done();
});
});
Предупреждение вызывается обновлениями состояния компонента, который случиться за пределами act
.
Изменения состояния, вызванные асинхронными вызовами к setData
, инициированными функцией useEffect
, всегда будут происходить за пределами act
.
Вот очень простой тест, демонстрирующий это поведение:
import React, { useState, useEffect } from 'react';
import { mount } from 'enzyme';
const SimpleComponent = () => {
const [data, setData] = useState('initial');
useEffect(() => {
setImmediate(() => setData('updated'));
}, []);
return ({data});
};
test('SimpleComponent', done => {
const wrapper = mount( );
setImmediate(done);
});
Когда я искал дополнительную информацию, я наткнулся на enzyme
выпуск № 2073 , открытый всего 10 часов назад. говорить об этом же поведении.
Я добавил вышеуказанный тест в комментарий , чтобы помочь разработчикам enzyme
решить эту проблему.
Как Mario говорит, JMF - Платформа Java Media является хорошей начальной точкой.
То, что не говорит Mario, - то, что Sun уничтожил поддержку MP3 с тех пор 2.1.1b, как детализировано в "Моей Потерянной Потоковой передаче запись в блоге" Статьи MP3.
Таким образом, необходимо добавить плагин для поддержки MP3:
список Форматов JMF действительно упоминает MP3 (под ACM - поддержкой менеджера по Сжатию звука Окна - раздел), но только для Windows, а не с одним только JMF.
Вы могли использовать MP3SPI от JavaZoom для потоковой передачи файлов MP3
Поскольку это говорит относительно их веб-страницы: "MP3SPI является Интерфейсом Поставщика услуг Java, который добавляет MP3 (MPEG 1/2/2.5 Уровень 1/2/3) поддержка формата аудио Платформы Java. Это поддерживает потоковую передачу, кадры ID3v2, Эквалайзер...."
Люди уже использовали его для создания приложений тот поток от Shoutcast
Надеюсь, это поможет
Я думаю, что можно использовать Платформу Java Media от SUN для достижения того, что Вы хотите. Будучи этим официальная реализация SUN это было бы способом пойти. Я вполне уверен, что фактическая потоковая передача является собственной все же.
Я смотрел в FAQ, и я нашел следующий ответ:
Q: Будет JMF 2.1.1 потоковых передачи поддержки?
Да. JMF 2.1.1 оказывает RTP/RTSP потоковая передача поддержки.
JMF 2.1.1 также обеспечивает HTTP и поддержку потоковой передачи FTP на стороне клиента.