我正在废弃wikia以获取信息,在我真正这样做之前,我想确保我可以连接到wikia服务器。
最好的办法吗?在我的nodejs应用程序中使用mocha测试!
我有一个配置文件,它有一个包含我想要的所有链接的对象。我有一个名为" connection"我希望每个测试都尝试连接到wikia。
{
"sources": {
"wikia": {
"link": "http://warframe.wikia.com/wiki",
"pages": {
"mods_2.0": "/Mods_2.0",
"warframe_mods": "/Category:Warframe_Mods",
//more links follow
}
}
}
}
这里的问题是我不想为十几个wikia页面编写和复制相同的测试。我想避免重复。
我的解决方法是将每个it
置于一个循环中,但是,代码会中断,因为我的wikiaPages
数组总是未定义,即使我使用before()
函数也是如此。
let assert = require("assert");
let superagent = require("superagent");
let jsonfile = require("jsonfile");
const SCRAPER_CONFIG_FILE = "./scraperConfig.json";
describe("connection", () => {
let wikiaUri;
let wikiaPages;
let completeUri;
before(() => {
let config = jsonfile.readFileSync(SCRAPER_CONFIG_FILE);
wikiaUri = config.sources.wikia.link;
wikiaPages = Object.values(config.sources.wikia.pages);
});
for(let pageUri of wikiaPages) {
completeUri = wikiaUri + pageUri;
it("connects to " + completeUri, done => {
superagent.get(completeUri, (error, res) => {
assert.ifError(error);
assert.equal(res.status, 200);
done();
});
});
}
});
答案 0 :(得分:1)
将其移出前一栏:
describe("connection", () => {
const config = jsonfile.readFileSync(SCRAPER_CONFIG_FILE);
const wikiaUri = config.sources.wikia.link;
const wikiaPages = Object.values(config.sources.wikia.pages);
before(() => {
});
for(let pageUri of wikiaPages) {
completeUri = wikiaUri + pageUri;
it("connects to " + completeUri, done => {
superagent.get(completeUri, (error, res) => {
assert.ifError(error);
assert.equal(res.status, 200);
done();
});
});
}
});
答案 1 :(得分:1)
那是因为您的循环.
├── master.py
├── presets.py
| ├── preset1.py
| └── preset2.py
├── other_scripts
| ├── something.sh
| └── somethingelse.sh
├── test.py *
├── Instal.md *
发生在声明阶段,即wikiaPages
阶段之前,因此before
尚未分配值。
展开wikiaPages
挂钩,以便在声明阶段读取配置文件和设置before
应该可以使它工作:
it