Тестирование функции Node.js, возвращаемое значение которой может изменяться в зависимости от момента выполнения асинхронной операции. - PullRequest
2 голосов
/ 12 августа 2011

Я пишу макет для модуля node-redis и использую Jasmine для его проверки.Я пишу тесты для различных аспектов команд Redis, и я намерен также иметь возможность запускать тесты для исходного модуля Redis.

Моя проблема: , если я правильно понял node-redis возвращаемое значение асинхронных функций node-redis отличается в зависимости от того, была ли команда отправлена ​​в Redis или помещена в очередь для отправки позже (например, для отправки после завершения соединения).Но я также хотел бы проверить возвращаемое значение, и если я напишу тест, такой как приведенный ниже:

it("should update value", function () {
  var client = redis.createClient();
  client.set("key", "1st");
  var value = client.get("key", function (err, data) {
    expect(err).toBeNull();
    expect(data).toBe("1st");
  });
  expect(value).toBe(true);
});

, он не пройдет, если я использую настоящий модуль Redis, потому что не будетдостаточно времени для подключения к базе данных.

Есть ли способ ожидания выполнения асинхронного запроса для продолжения тестирования кода?

(Ответы с различными подходами к этой проблеме также приветствуются.)

1 Ответ

0 голосов
/ 13 августа 2011

expect(err).toBeNull() == expect(value).toBe(true); потому что асинхронные функции ничего не возвращают (не определено).Вы должны сделать это только

client.set("key", "1st");
client.get("key", function (err, data) {
  expect(err).toBeNull();
  expect(data).toBe("1st");
});

Но если вы хотите подождать, вы должны использовать что-то вроде этого:

var value = undefined;
client.get("key", function (err, data) {
  expect(err).toBeNull();
  expect(data).toBe("1st");
  value = true;
});
setInterval(function(){ expect(value).toBe(true); }, 10000); // wait 10 seconds for connection
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...