Saya sedang menguji aplikasi web yang menggunakan cloudant. Saya menyiapkan tes db di beforeAll() dan ingin menghapusnya setelah semua tes di afterAll().

Kode sebelum dieksekusi dan saya membuat db, tetapi untuk beberapa alasan kode setelahnya tidak dieksekusi. Lebih tepatnya, panggilan ke cloudant api tidak dieksekusi. Baik sebelum dan sesudah menggunakan API yang sama yang ditangani janji.

Dalam pengujian saya.js

const cloudant = require('../storage/cloudant');

const dbname = 'testdb';
const doc = { _id: 'testDocument' };
const dbConfig = { dbname, doc };

beforeAll(() => {
  cloudant.createDB(dbname)
    .then(res => console.log(res))
    .then(() => cloudant.createDocument(dbConfig));
});

afterAll(() => {
  console.log('It is called');
  cloudant.deleteDatabase(dbname).then((res) => console.log(res)).catch(e => console.log(e));

// test templates functions
test('Read documnet from cloudant', async () => {
  const response = await cloudant.readDocument(dbname, doc._id);
  expect(response._id).toBe(doc._id);
});

Saya berharap db akan dihapus setelah eksekusi tes. Namun satu-satunya hal yang tampaknya dipanggil di afterALL adalah console.log; Saya tidak mendapatkan pengecualian atau kesalahan untuk panggilan deleteDatabase. Metode deleteDatabase berfungsi. Saya mengujinya dalam skrip js terpisah.

cloudant.deleteDatabase(dbname)
  .then((res) => console.log(res))
  .catch(e => console.log(e));

Mengembalikan { ok: true }

Metode penghapusan didefinisikan sebagai berikut:

 async deleteDatabase(dbname) {
    return this.cloudantDB.db.destroy(dbname);
  }

Hasil tes adalah sebagai berikut:

> jest server/test

[2019-08-08T10:58:55.132] [INFO] App-cloudant - creating new db: testdb
[2019-08-08T10:58:55.138] [INFO] App-cloudant - Reading testDocument
  console.log server/storage/cloudant.js:43
    testdb

  console.log server/storage/cloudant.js:44
    testDocument

  console.log server/test/test.js:17
    { ok: true }

[2019-08-08T10:58:55.487] [INFO] App-cloudant - Creating document [object Object]
 PASS  server/test/test.js
  ✓ adds 1 + 2 to equal 3 (2ms)
  ✓ Read documnet from cloudant (515ms)

Test Suites: 1 passed, 1 total
Tests:       2 passed, 2 total
Snapshots:   0 total
Time:        2.184s
Ran all test suites matching /server\/test/i.
  console.log server/test/test.js:22
    It is called

Jadi beforeAll berfungsi, pengujian berhasil dijalankan dan console.log dari afterAll dipanggil tetapi bukan fungsi deleteDatabase.

1
Whiat 8 Agustus 2019, 11:57

1 menjawab

Jawaban Terbaik

Coba sesuatu seperti ini:

afterAll(async () => {
  await Promise.resolve().then(console.log);
});
1
Hitmands 8 Agustus 2019, 08:59