#fluid-framework
#жидкая среда
Вопрос:
У меня есть такой тест, но я не могу получить ‘sharedMap‘ в значении ‘sharedSeq1‘, я не знаю, как получить значение ‘remoteFluidObjectHandle‘.
import {MockContainerRuntimeFactory, MockFluidDataStoreRuntime, MockStorage} from "@fluidframework/test-runtime-utils";
import {SharedObjectSequence, SharedObjectSequenceFactory} from "@fluidframework/sequence";
import * as mocks from "@fluidframework/test-runtime-utils";
import {SharedMap} from "@fluidframework/map";
import {IFluidHandle} from "@fluidframework/core-interfaces";
const mockRuntime: mocks.MockFluidDataStoreRuntime = new mocks.MockFluidDataStoreRuntime();
describe('ShredObjectSequence', function () {
it('should get synchronization data from another shared object', async function () {
const dataStoreRuntime1 = new MockFluidDataStoreRuntime();
const sharedSeq1: SharedObjectSequence<IFluidHandle<SharedMap>> = new SharedObjectSequence(mockRuntime, 'shareObjectSeq1', SharedObjectSequenceFactory.Attributes,)
const containerRuntimeFactory = new MockContainerRuntimeFactory();
dataStoreRuntime1.local = false;
const containerRuntime1 = containerRuntimeFactory.createContainerRuntime(
dataStoreRuntime1,
);
const services1 = {
deltaConnection: containerRuntime1.createDeltaConnection(),
objectStorage: new MockStorage(),
};
sharedSeq1.initializeLocal();
sharedSeq1.connect(services1);
const dataStoreRuntime2 = new MockFluidDataStoreRuntime();
const containerRuntime2 = containerRuntimeFactory.createContainerRuntime(
dataStoreRuntime2,
);
const services2 = {
deltaConnection: containerRuntime2.createDeltaConnection(),
objectStorage: new MockStorage(),
};
const sharedSeq2: SharedObjectSequence<IFluidHandle<SharedMap>> = new SharedObjectSequence(mockRuntime, 'shareObjectSeq2', SharedObjectSequenceFactory.Attributes,)
sharedSeq2.initializeLocal();
sharedSeq2.connect(services2);
// insert a node into sharedSeq2, it will sync to sharedSeq1
sharedSeq2.insert(0, [<IFluidHandle<SharedMap>>new SharedMap('sharedMapId', mockRuntime, SharedMap.getFactory().attributes).handle])
containerRuntimeFactory.processAllMessages();
// next case is passed, it show we got the sharedSeq2 changed
expect(sharedSeq1.getLength()).toBe(1)
const remoteFluidObjectHandle = await sharedSeq1.getRange(0, 1)[0];
// at here, i get error: Cannot read property 'mimeType' of null, it cause by remoteFluidObjectHandle.ts:51:30
const sharedMap = await remoteFluidObjectHandle.get()
expect(sharedMap).not.toBeUndefined()
});
});
при запуске этого теста будет получена ошибка ‘Не удается прочитать свойство ‘mimeType’ из null‘, вызванная ‘remoteFluidObjectHandle.ts:51:30‘
Ответ №1:
Модели fluid имеют очень ограниченное и специфическое поведение, похоже, вы выходите за их пределы. Вам больше повезет с сквозным тестированием, см. packages test end-to-end-tests . Они используют тот же сервер в памяти, что и наш, что и игровая площадка на fluidframework dot com. Сервер в памяти использует тот же код, что и tinylicious, наш сервер с одним процессом, и routerlicious, наша эталонная реализация на основе docker.
Комментарии:
1. да, я проверяю тестовую папку e2e и нахожу много полезного демонстрационного кода