如何使用 mocha 和 chai 正确测试使用 axios.get 和 cheerios.load 函数的函数?
How do I properly test a function that use axios.get and cheerios.load functions with mocha and chai?
我有这个 index.js 文件
const axios = require("axios");
const cheerio = require('cheerio');
const fetchData = async (webpage) => {
const result = await axios.get(webpage);
return cheerio.load(result.data);
}
const extractData = async (webPage) => {
const $ = await fetchData(webPage);
const numMains = $('.rank').text();
//Should return the following string
//1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.
return numMains;
}
const siteUrl = "https://news.ycombinator.com/";
(async (webPage) => {console.log(await extractData(webPage));})(siteUrl);
module.exports = {
extractData: extractData
}
我有这个 test.js 文件
var chai = require('chai');
var expect = chai.expect;
var functionNames = require('../index.js');
describe('extractData() Unit-Test', () => {
it('This function should return a given string', () => {
// 1. ARRANGE
const siteUrl = "https://news.ycombinator.com/";
const shouldResult = "1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.";
// 2. ACT
const result = functionNames.extractData(siteUrl);
// 3. ASSERT
expect(result).to.be.equal(shouldResult);
});
});
*我没有通过这个 AssertionError: *
AssertionError: expected {} to equal '1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.'
有人知道我做错了什么吗?我该如何解决这个问题?
您缺少 await
,您正在比较 Promise
与 1,2,3
...
it('This function should return a given string', async() => {
// 1. ARRANGE
const siteUrl = "https://news.ycombinator.com/";
const shouldResult = "1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.";
// 2. ACT
const result = await functionNames.extractData(siteUrl);
// 3. ASSERT
expect(result).to.be.equal(shouldResult);
});
请记住,您在进行测试时实际上是在执行请求,如果站点出现故障,测试将失败。如果你不想,你可以模拟请求,使用 nock
或类似的包。
作为 Marcos 解决方案的替代方案,您还可以使用来自 chai 的 eventually
:
result.should.eventually.equal(shouldResult);
我有这个 index.js 文件
const axios = require("axios");
const cheerio = require('cheerio');
const fetchData = async (webpage) => {
const result = await axios.get(webpage);
return cheerio.load(result.data);
}
const extractData = async (webPage) => {
const $ = await fetchData(webPage);
const numMains = $('.rank').text();
//Should return the following string
//1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.
return numMains;
}
const siteUrl = "https://news.ycombinator.com/";
(async (webPage) => {console.log(await extractData(webPage));})(siteUrl);
module.exports = {
extractData: extractData
}
我有这个 test.js 文件
var chai = require('chai');
var expect = chai.expect;
var functionNames = require('../index.js');
describe('extractData() Unit-Test', () => {
it('This function should return a given string', () => {
// 1. ARRANGE
const siteUrl = "https://news.ycombinator.com/";
const shouldResult = "1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.";
// 2. ACT
const result = functionNames.extractData(siteUrl);
// 3. ASSERT
expect(result).to.be.equal(shouldResult);
});
});
*我没有通过这个 AssertionError: *
AssertionError: expected {} to equal '1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.'
有人知道我做错了什么吗?我该如何解决这个问题?
您缺少 await
,您正在比较 Promise
与 1,2,3
...
it('This function should return a given string', async() => {
// 1. ARRANGE
const siteUrl = "https://news.ycombinator.com/";
const shouldResult = "1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.";
// 2. ACT
const result = await functionNames.extractData(siteUrl);
// 3. ASSERT
expect(result).to.be.equal(shouldResult);
});
请记住,您在进行测试时实际上是在执行请求,如果站点出现故障,测试将失败。如果你不想,你可以模拟请求,使用 nock
或类似的包。
作为 Marcos 解决方案的替代方案,您还可以使用来自 chai 的 eventually
:
result.should.eventually.equal(shouldResult);