Как мне создать макет контейнера с помощью @inrupt / solid-client?

#solid

#solid

Вопрос:

Если я пишу модульные тесты для кода с использованием пакета npm @inrupt/solid-client , который пытается считывать данные из контейнера, как мне создать макет этого контейнера?

Комментарии:

1. Я делюсь вопросами, которые я получаю через сообщения чата (и ответы на них) через StackOverflow, чтобы они могли быть полезны и другим — надеюсь, все в порядке.

Ответ №1:

Технически контейнер — это обычный ресурс с вещью для каждого ресурса, который он содержит, и одна вещь, идентифицируемая собственным URL контейнера, который указывает на них.

Таким образом, следующий код должен сделать трюк:

 // We're going to mock a Container at https://vincentt.inrupt.net/public/,
// that contains one Resource at https://vincentt.inrupt.net/public/child-one.ttl.

const containerUrl = "https://vincentt.inrupt.net/public/";

// Add a Thing for the child at
// https://vincentt.inrupt.net/public/child-one.ttl:
let childOneListing = createThing({ url: containerUrl   "child-one.ttl" });
childOneListing = addUrl(childOneListing, rdf.type, ldp.Resource);
childOneListing = addDatetime(childOneListing, dct.modified, new Date());

// Create a Thing identified by the Container's own URL,
// pointing to the Things representing its children:
let childrenIndex = createThing({ url: containerUrl });
childrenIndex = addUrl(childrenIndex, rdf.type, ldp.BasicContainer);
childrenIndex = addUrl(childrenIndex, rdf.type, ldp.Container);
// Add child-one.ttl to this index:
childrenIndex = addUrl(childrenIndex, ldp.contains, childOneListing);

// Now initialise a mock Resource for this Container for use in our unit test,
// and add the index and the child Resources' Things:
let mockContainer = mockSolidDatasetFrom(containerUrl);
mockContainer = setThing(mockContainer, childrenIndex);
mockContainer = setThing(mockContainer, childOneListing);
 

CodeSandbox с приведенным выше кодом можно найти здесь: https://codesandbox.io/s/ancient-wood-3u8m3?fontsize=14amp;hidenavigation=1amp;theme=dark