注册测试助手时如何访问 Ember 数据存储? Ember 3.3
How to access Ember Data store when registering test helper? Ember 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 函数时,它给了我一个未定义的值。将不胜感激
哈!我想我明白了:
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
希望这对您有所帮助:)
我正在使用需要访问 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 函数时,它给了我一个未定义的值。将不胜感激
哈!我想我明白了:
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
希望这对您有所帮助:)