Я знаю, что Node - это обратные вызовы. Я старался иметь это в виду при создании теста Jasmine, поскольку узнаю больше о Jasmine и Node.
Я написал очень простой тест с использованием jasmine-node, который должен ПОЛУЧАТЬ HTML-страницу, использовать 'cheerio' для загрузки и анализа возвращенного HTML и извлекать содержимое HTML-элемента. Мои тесты должны подтверждать точность текста, возвращаемого «cheerio».
Я обнаружил, что функция, которую я тестирую, возвращает undefined до завершения запроса. Вы можете увидеть это в результатах тестов. После того, как тесты сообщат об ошибке, вы увидите результаты console.log.
Я попытался использовать обратные вызовы для решения этой проблемы, и я видел сообщения об использовании таких библиотек, как async. Я пробовал использовать beforeEach () для хранения этих данных для теста.
Я не нашел правильный рецепт, и мне нужна помощь, пожалуйста.
index.html
<!doctype html>
<html>
<body>
<span class="title">Title Goes Here</span>
</body>
</html>
module1.js
var request = require('request');
var cheerio = require('cheerio');
exports.whoAmI = function () {
'use strict';
return "module1";
};
exports.testJq = function () {
'use strict';
var tipsotext = function (callback) {
var output;
request.get('http://localhost/test-test/index.html', function optionalCallback(err, httpResponse, body) {
var $ = cheerio.load(body);
output = $('.title').text();
console.log("Executing callback with data: " + output);
callback(null, output);
});
};
tipsotext(function (err, data) {
console.log("Returning with data: " + data);
return data;
});
};
module1-spec.js (мой тест)
var module1 = require("../src/module1.js");
describe("module1", function () {
'use strict';
it("should identify itself with whoAmI", function () {
var test;
test = module1.whoAmI();
expect(test).toBe("module1");
});
it("should get data from the page", function () {
var test;
test = module1.testJq();
expect(test).toBe("Title Goes Here");
});
});
Результат моего неудавшегося теста
Failures:
1) module1 should get data from the page
Message:
Expected undefined to be 'Title Goes Here'.
Stacktrace:
Error: Expected undefined to be 'Title Goes Here'.
at null.<anonymous> (c:\test-test\spec\module1-spec.js:14:22)
Finished in 0.011 seconds
2 tests, 2 assertions, 1 failure, 0 skipped
Executing callback with data: Title Goes Here
Returning with data: Title Goes Here