Отсутствует регион в конфигурации при попытке запустить Chai на локальном DynamoDB с Dynamoose - PullRequest
0 голосов
/ 09 мая 2018

Я использую Restify и пытаюсь научиться писать тесты для моих методов CRUD. Я могу проверить их на Postman без каких-либо проблем при подключении к DynamoDB. Для тестов я подключусь к моей локальной DynamoDB, которая работает на localhost: 8000.

На server.listen, у меня есть это:

dynamoose.AWS.config.update({
  accessKeyId: config.db.aws_access_key_id,
  secretAccessKey: config.db.aws_secret_access_key,
  region: config.db.aws_region
});

if (config.env == "test") {
  dynamoose.local();
}

(я пытался также вызвать dynamoose.local() выше)

Когда я запускаю тест с командой mocha --timeout 10000, я получаю следующую ошибку:

1) Uncaught error outside test suite:
     Uncaught ConfigError: Missing region in config
      at Request.VALIDATE_REGION (node_modules/aws-sdk/lib/event_listeners.js:91:45)
      at Request.callListeners (node_modules/aws-sdk/lib/sequential_executor.js:105:20)
      at callNextListener (node_modules/aws-sdk/lib/sequential_executor.js:95:12)
      at /Users/username/Development/projectname-api/node_modules/aws-sdk/lib/event_listeners.js:85:9
      at finish (node_modules/aws-sdk/lib/config.js:320:7)
      at /Users/username/Development/projectname-api/node_modules/aws-sdk/lib/config.js:338:9
      at SharedIniFileCredentials.get (node_modules/aws-sdk/lib/credentials.js:126:7)
      at getAsyncCredentials (node_modules/aws-sdk/lib/config.js:332:24)
      at Config.getCredentials (node_modules/aws-sdk/lib/config.js:352:9)
      at Request.VALIDATE_CREDENTIALS (node_modules/aws-sdk/lib/event_listeners.js:80:26)
      at Request.callListeners (node_modules/aws-sdk/lib/sequential_executor.js:101:18)
      at Request.emit (node_modules/aws-sdk/lib/sequential_executor.js:77:10)
      at Request.emit (node_modules/aws-sdk/lib/request.js:683:14)
      at Request.transition (node_modules/aws-sdk/lib/request.js:22:10)
      at AcceptorStateMachine.runTo (node_modules/aws-sdk/lib/state_machine.js:14:12)
      at Request.runTo (node_modules/aws-sdk/lib/request.js:403:15)
      at Request.send (node_modules/aws-sdk/lib/request.js:367:10)
      at features.constructor.makeRequest (node_modules/aws-sdk/lib/service.js:193:27)
      at features.constructor.svc.(anonymous function) [as describeTable] (node_modules/aws-sdk/lib/service.js:499:23)
      at Table.describe (node_modules/dynamoose/lib/Table.js:339:7)
      at Table.init (node_modules/dynamoose/lib/Table.js:141:10)
      at Function.compile (node_modules/dynamoose/lib/Model.js:201:9)
      at Dynamoose.model (node_modules/dynamoose/lib/index.js:39:21)
      at Object.<anonymous> (models/modelName.js:63:35)
      at require (internal/module.js:11:18)
      at Object.<anonymous> (test/testFileName.js:4:25)
      at require (internal/module.js:11:18)
      at Array.forEach (<anonymous>)
      at startup (bootstrap_node.js:188:16)
      at bootstrap_node.js:609:3

Теперь я знаю, что это проблема, потому что Dynamoose не может настроить регион. Но когда я запускаю его в разработке, он работает без проблем с тем же фрагментом кода. В моем конфигурационном файле у меня есть такая же конфигурация БД. Я подтвердил это, добавив console.log(config.db) внутрь, если (config.env == "test"). Поэтому я думаю, что это должно быть настроено.

Вот мой тест, если он нужен:

describe('ModelName', () => {
  beforeEach((done) => {
    ModelName.delete({}, (err) => {
      done();
    });
  });

  describe('/GET modelName', () => {
    it('it should GET all the model-name instances', (done) => {
      chai.request(server)
        .get('/model-name')
        .end((err, res) => {
            res.should.have.status(200);
            res.body.should.be.a('array');
            res.body.length.should.be.eql(0);
          done();
        });
    });
  });
});

Есть идеи, в чем может быть проблема?

1 Ответ

0 голосов
/ 09 мая 2018

Когда вы работаете локально, ваш регион будет забираться из файла, расположенного в

%UserProfile%\.aws\config

Который будет выглядеть примерно так

[default]
region=us-west-2
output=json

Я думаю, что когда вы работаете на сервере, блок

dynamoose.AWS.config.update({
  accessKeyId: config.db.aws_access_key_id,
  secretAccessKey: config.db.aws_secret_access_key,
  region: config.db.aws_region
});

Не выполняет то, что вы ожидаете, но проблема скрыта, когда вы запускаете локально, так как конфиги выбираются в вашем профиле.

Попробуйте установить конфигурацию как литерал region: 'us-west-2', или вы можете установить учетные данные, а конфигурации - это переменные среды на сервере (они будут выбраны автоматически).

...