注册测试助手时如何访问Ember数据存储?灰烬3.3

时间:2018-08-11 00:37:04

标签: ember.js ember-testing ember-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 个答案:

答案 0 :(得分:2)

哈!我想我明白了:

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

不确定是否有副作用吗?请让我知道是否可以,我想我已经花了足够的时间尝试建立一个良好的测试环境:p

答案 1 :(得分:2)

这是打字稿,但希望它可以在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

希望这会有所帮助:)

相关问题