Мой код выглядит следующим образом:
let fs = require('fs');
let path = require('path');
let supertest = require('supertest');
let json = require('../../Util/json');
let chai = require('chai');
let assert = chai.assert;
let client = supertest("some_base_url");
describe('My test suite', function () {
it('My sample test', () => {
let results = {};
fs.readdirSync("some_dir").forEach(dir => {
fs.readdirSync("some_dir" + dir).forEach(file => {
console.log(`Found file ${file} in directory ${dir}`);
let json_file = "some_dir" + dir + path.sep + file;
let data = fs.readFileSync(json_file, 'utf8');
if (dir !== undefined) {
let url = dir + file.split('.')[0];
console.log("Request endpoint:", url);
client.get(url)
.set('Content-Type', 'application/json')
.expect(200)
.end(function (error, response) {
if (error) {
console.log("Error:", error);
} else {
data_obj = JSON.parse(data);
result_obj = JSON.parse(response.text);
results[dir + '-' + file] = json.assertJson(data_obj, result_obj); // assertJson results boolean value
}
});
} else {
console.log(`Could not find any endpoint defined for ${dir}, skipping tests for the same.`);
}
});
});
console.log("Results:",JSON.stringify(results, null, 2));
assert(!Object.values(results).includes(false));
});
});
Проблема состоит в том, что объект results
пуст при печати вне внешнего цикла for, но выдает правильно заполненный вывод при печати внутри цикла for.Несмотря на то, что мой код является синхронным и не используются обещания, я удивляюсь, почему это происходит.
РЕДАКТИРОВАТЬ: После выполнения некоторых экспериментов (например, закомментировав supertest
код в моем коде и просто изменив объект results
внутри цикла for), я получаю ожидаемый вывод для results
вне циклов for.Так что я считаю, что что-то не так с тем, как я использую supertest
.Я намерен использовать его синхронно.