При использовании двух источников данных, как внедрить перехватчики с репозиториями, которые прикреплены к выбранному источнику данных? - PullRequest
0 голосов
/ 10 июля 2020

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

export class MyGlobalInterceptor implements Provider<Interceptor> {
  constructor(
    @repository(MyRepository)
    public myRepo: MyRepository,
  ) {}

  value() {
    return this.intercept.bind(this);
  }

  async intercept(
    invocationCtx: InvocationContext,
    next: () => ValueOrPromise<InvocationResult>,
  ) {
    // ... do something with this.myRepo, e.g. validate a token
    return next();
  }
}

При выполнении приемочных испытаний перехватчик внедряется с репозиторием источника данных разработки. Есть ли способ вместо этого прикрепить репозиторий к источнику тестовых данных?

1 Ответ

0 голосов
/ 13 июля 2020
• 1000 /datasources/mongodb.datasource.ts
const mainConfig = {
  name: 'main',
  connector: 'mongodb',
  database: process.env.MONGODB_DATABASE,
  // host, port, user, password, etc.
};

const testConfig = {
  name: 'test',
  connector: 'mongodb',
  database: process.env.MONGODB_TEST_DATABASE,
  // host, port, user, password, etc.
};

// this is the important part
const config = process.env.NODE_ENV === 'test' ? testConfig : mainConfig;

// the rest is unchanged cli generated code
@lifeCycleObserver('datasource')
export class MongodbDataSource extends juggler.DataSource
  implements LifeCycleObserver {
  static dataSourceName = 'mongodb';
  static readonly defaultConfig = config;

  constructor(
    @inject('datasources.config.mongodb', { optional: true })
    dsConfig: object = config,
  ) {
    super(dsConfig);
  }
}

Я не фанат этого решения, потому что в идеале я бы хотел, чтобы все связанные с тестами материалы содержались в src / __ tests__ и не появлялись где-либо еще. Если есть лучший способ сделать это, дайте мне знать.

...