Как получить доступ к хранилищу Ember Data при регистрации тестового помощника? Эмбер 3.3

Я использую специальный тестовый помощник, которому требуется доступ к хранилищу данных Ember, но я не знаю, как получить к нему доступ из данного аргумента приложения.

export default registerAsyncHelper('myCustomHelper', function(app) {
  console.log(app); // how to access store?
  let store = app.__registry__.registrations['service:store'];
  store.pushPayload(// json payload);
});

Как получить доступ к магазину при регистрации пользовательского помощника? Я пытался найти способ получить к нему доступ из __registry__.registrations['service:store'] ключ, но это дает мне неопределенное значение, когда я вижу, что он там и имеет функцию pushPayload. Помощь будет принята с благодарностью

2 ответа

Решение

Хах! Я думаю, я понял:

export default registerAsyncHelper('myCustomHelper', function(app) {
  let instance = app.buildInstance();
  let store = instance.lookup('service:store');
  store.pushPayload(// json payload);
});

Не уверен, что это имеет какие-либо побочные эффекты, хотя? Пожалуйста, дайте мне знать, если это произойдет, я думаю, что потратил достаточно времени, пытаясь настроить хорошую тестовую среду:p

Это машинопись, но, надеюсь, она должна работать в js (без аннотаций типов)

// tests/helpers/get-service.ts
import { getContext } from "@ember/test-helpers";

export function getService<T>(name: string): T {
  const { owner } = getContext();

  const service = owner.lookup(`service:${name}`);

  return service;
}

пример использования:

// tests/helpers/create-current-user.ts
import { run } from '@ember/runloop';
import { DS } from 'ember-data';

import Identity from 'emberclear/data/models/identity/model';

import { getService } from './get-service';

export async function createCurrentUser(): Promise<Identity> {
  const store = getService<DS.Store>('store');

  const record = store.createRecord('identity', {
    id: 'me', name: 'Test User'
  });

  await record.save();

  return record;
}

этот код взят из https://emberclear.io/ https://gitlab.com/NullVoxPopuli/emberclear/tree/master/packages/frontend/tests/helpers

надеюсь это поможет:)

Другие вопросы по тегам