私はJavaScriptエコシステムの初心者です。私は、Mocha/Chaiを使用してREST API用のAPIテストを作成しようとしています。私の要件は、各テストケースを実行する前にデータベースをクリーンアップする必要があるということです。私の中で今Mochaでテストを実行する前にbefore()を実行する方法を教えてください。
var dbCleanup = require('./dbCleanup.js').dbCleanup;
function _beforeClean(done) {
try {
dbCleanup()
.then(done)
} catch (err) {
console.error(err);
}
}
exports.beforeCleanup = _beforeClean;
:だから、私は次のコードを持っているglobalBefore.jsを別のファイルを呼び出した
var config = require("config.json");
const pg = require('pg');
var connectionString = config.pgConnectionString
console.log("DB Connection String: ", connectionString)
function dbCleanup() {
var dbTables = ["projects", "employees"];
var pgClient = new pg.Client(connectionString);
var promise = new Promise(function (resolve, reject) {
pg.connect(connectionString, (err, pgClient, done) => {
if (err) {
done();
console.log(err);
reject();
}
for (i = 0; i < dbTables.length; i++) {
query = "TRUNCATE " + dbTables[i] + " CASCADE;"
pgClient.query(query, function (err, res) {
if (err) {
done();
console.error('error running query', err);
reject();
}
resolve();
});
}
});
});
pgClient.end()
return promise;
}
exports.dbCleanup = dbCleanup;
dbCleanup.jsと呼ばれるファイルに次のコードを書きましたモカtest.jsファイル、私は次のようにデータベースのクリーンアップ機能を呼び出そう:
var request = require("request");
var rp = require("request-promise");
var config = require("../config.json");
var expect = require('chai').expect;
var data = require("./data.json");
var globalBefore = require("../globalBefore.js");
describe("POST /employees/", function() {
console.log("clearing db tables...")
before(globalBefore.beforeCleanup, function (done) {
done();
});
beforeEach(function (done) {
... do some business logic related work here ...
});
it.only('Try create an employee', function (done) {
... API call to create an employee and use Chai assertions to validate ...
});
});
私が直面している問題は、MochaはdbCleanup()関数が完了する前にもテストを実行することです。これは私のDBがkaputに行くのを引き起こし、私は望ましくない動作に遭遇する。
SOコミュニティから誰でも助けてください。私はウェブで見つけることができるさまざまなオプションを試しましたが、問題を修正することはできませんでした。コードの断片に示されているように、私は約束を使用すると、モカがためそれ句を実行する前にどのように私が完了するまでに前句内部の指示を強制しない、より汎用的であるために問題
を解決している必要があることを期待しテスト?
ありがとうございます!
ありがとうございます。私は両方のオプションを試してみましたが、私は同じ問題を抱えています。私のテストは、dbCleanup()関数が完了する前から実行を開始します。私は現在、私のクリーンアップ機能とPromisesを使用している方法が実際にその部分をしているのかどうかは不思議です:-( –
'try/catch'にもエラーがあります。約束のためには、' Promise.catch私はそれを変更し、実際の例を追加しました。 – luisenrike
解決策を詳しく説明してくれてありがとうございました。 –