使用Mocha运行simillar测试

时间:2017-01-30 15:53:18

标签: node.js testing mocha

背景

我正在废弃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();
            });
        });
    }
});

问题

  • 如何修复此代码,以便它有效?

2 个答案:

答案 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