Loopbackjs 环回4-连接到Npm测试上的测试数据库

Loopbackjs 环回4-连接到Npm测试上的测试数据库,loopbackjs,Loopbackjs,我想为我的测试运行内存中的数据库,但是当我运行npm测试时,我无法使我的应用程序连接到它 当我运行npm测试时我得到: Connection fails: Error: ER_ACCESS_DENIED_ERROR: Access denied for user ''@'172.21.0.1' (using password: NO) 这是因为我没有在npm测试中设置任何env变量,但我不想在测试中使用MySQL,而只是一个内存中的数据库,这就是我所拥有的 testdb.datasources

我想为我的测试运行内存中的数据库,但是当我运行
npm测试时,我无法使我的应用程序连接到它

当我运行
npm测试时
我得到:

Connection fails: Error: ER_ACCESS_DENIED_ERROR: Access denied for user ''@'172.21.0.1' (using password: NO)
这是因为我没有在npm测试中设置任何env变量,但我不想在测试中使用MySQL,而只是一个内存中的数据库,这就是我所拥有的

testdb.datasources.ts

import {juggler} from '@loopback/repository';

export const testdb: juggler.DataSource = new juggler.DataSource({
  name: 'testdb',
  connector: 'memory',
});
import {Client, expect} from '@loopback/testlab';
import {MyApplication} from '../..';
import {setupApplication} from './test-helper';
import {givenEmptyDatabase} from '../helpers/database.helpers';

describe('Country Controller', () => {
  let app: MyApplication;
  let client: Client;

  before('setupApllication', async () => {
    ({app, client} = await setupApplication());
  });

  before(givenEmptyDatabase);
  // before(givenRunningApp);

  after(async () => {
    await app.stop();
  });

  it('Should count 0 countries', async () => {
    const res = await client.get('/countries/count').expect(200);

    //assertations
    expect(res.body.count).to.equal(0);
  });
});
import {MyApplication} from '../..';
import {
  createRestAppClient,
  givenHttpServerConfig,
  Client,
} from '@loopback/testlab';
import {testdb} from '../fixtures/datasources/testdb.datasource';

export async function setupApplication(): Promise<AppWithClient> {
  const app = new MyApplication({
    rest: givenHttpServerConfig({host: 'localhost'}),
  });

  app.dataSource(testdb); // <--- Hoped this would do the job 
  await app.boot();
  await app.start();

  const client = createRestAppClient(app);

  return {app, client};
}

export interface AppWithClient {
  app: MyApplication;
  client: Client;
}
country.controller.acceptance.ts

import {juggler} from '@loopback/repository';

export const testdb: juggler.DataSource = new juggler.DataSource({
  name: 'testdb',
  connector: 'memory',
});
import {Client, expect} from '@loopback/testlab';
import {MyApplication} from '../..';
import {setupApplication} from './test-helper';
import {givenEmptyDatabase} from '../helpers/database.helpers';

describe('Country Controller', () => {
  let app: MyApplication;
  let client: Client;

  before('setupApllication', async () => {
    ({app, client} = await setupApplication());
  });

  before(givenEmptyDatabase);
  // before(givenRunningApp);

  after(async () => {
    await app.stop();
  });

  it('Should count 0 countries', async () => {
    const res = await client.get('/countries/count').expect(200);

    //assertations
    expect(res.body.count).to.equal(0);
  });
});
import {MyApplication} from '../..';
import {
  createRestAppClient,
  givenHttpServerConfig,
  Client,
} from '@loopback/testlab';
import {testdb} from '../fixtures/datasources/testdb.datasource';

export async function setupApplication(): Promise<AppWithClient> {
  const app = new MyApplication({
    rest: givenHttpServerConfig({host: 'localhost'}),
  });

  app.dataSource(testdb); // <--- Hoped this would do the job 
  await app.boot();
  await app.start();

  const client = createRestAppClient(app);

  return {app, client};
}

export interface AppWithClient {
  app: MyApplication;
  client: Client;
}
测试助手.ts

import {juggler} from '@loopback/repository';

export const testdb: juggler.DataSource = new juggler.DataSource({
  name: 'testdb',
  connector: 'memory',
});
import {Client, expect} from '@loopback/testlab';
import {MyApplication} from '../..';
import {setupApplication} from './test-helper';
import {givenEmptyDatabase} from '../helpers/database.helpers';

describe('Country Controller', () => {
  let app: MyApplication;
  let client: Client;

  before('setupApllication', async () => {
    ({app, client} = await setupApplication());
  });

  before(givenEmptyDatabase);
  // before(givenRunningApp);

  after(async () => {
    await app.stop();
  });

  it('Should count 0 countries', async () => {
    const res = await client.get('/countries/count').expect(200);

    //assertations
    expect(res.body.count).to.equal(0);
  });
});
import {MyApplication} from '../..';
import {
  createRestAppClient,
  givenHttpServerConfig,
  Client,
} from '@loopback/testlab';
import {testdb} from '../fixtures/datasources/testdb.datasource';

export async function setupApplication(): Promise<AppWithClient> {
  const app = new MyApplication({
    rest: givenHttpServerConfig({host: 'localhost'}),
  });

  app.dataSource(testdb); // <--- Hoped this would do the job 
  await app.boot();
  await app.start();

  const client = createRestAppClient(app);

  return {app, client};
}

export interface AppWithClient {
  app: MyApplication;
  client: Client;
}
import{MyApplication}来自“....”;
进口{
createRestAppClient,
给定HttpServerConfig,
客户
}来自“@loopback/testlab”;
从“../fixtures/datasources/testdb.datasource”导入{testdb};
导出异步函数setupApplication():Promise{
const app=新的MyApplication({
rest:givenHttpServerConfig({host:'localhost'}),
});

app.dataSource(testdb);//我发现这种方法适合我

更改此项:

app.dataSource(testdb);
为此:

await app.bind('datasource.config.db').to({
   name: 'db',
   connector: 'memory'
});
您只是将数据源的配置更改为使用本地数据库,但仍然是相同的数据源

确保bind的字符串与主数据源中使用的字符串相同