好的,我不确定这是否可能,但让我说,假设我是整个世界的中央天气监测仪。我需要能够打电话给每个国家的气象API,以获得像温度,风和降雨之类的信息。所有的国家都聚集在一起,同意一揽子出口同样的功能。因此,每个国家都建立了一个国家预防机制一揽子计划,其中包括:
exports.currentTemp() { return <current temperature>;}
exports.currentWind() { return <current wind speed>;}
exports.currentRain() { return <current rain fall>;}中央天气监测已经创建了一个测试套件,称为天气api测试,并运行一些测试。在推行代码之前,每个国家都有责任确保代码通过测试。每个国家如何依靠气象api测试包并在那里运行测试?我想要问这个问题的一个简短的方法是,我如何动态地向摩卡测试中添加一个要求(‘uk-weather’)?
发布于 2016-02-05 10:52:43
有一个叫做rewire的库可以让你在这里做你想做的事。它基本上允许您覆盖其他脚本中的局部变量。
https://github.com/jhnns/rewire
例如:如果您的共享测试(让我们称之为theirTest)需要这样的脚本:
var foo = require( "theirScript" );您可以在自己的测试中使用重连线,如下所示:
var rewire = require("rewire");
var theirTest = rewire( "./theirTest" ); // Note that I used rewire here and not require
var bar = require("./myScript"); // The script you want to inject into their tests
theirTest.__set__("foo", bar); //__set__ is a rewire injected function allowing you to access foo您最终得到的是您自己的新测试脚本,它简单地将您的脚本注入到它们的测试中。在这种情况下,您将根据您的脚本运行他们的测试。
发布于 2016-02-05 12:14:05
您可以让您的测试套件加载一个名为./impl的模块,希望根据他们的实现运行您的套件的人将创建这个模块,以便加载他们的特定实现并将其提供给您的测试套件。套房可以是这样的:
var assert = require("assert");
var impl;
try {
impl = require("./impl");
}
catch (e) {
if (e instanceof Error && e.code === "MODULE_NOT_FOUND")
throw new Error("You must create a module that loads as `./impl` in" +
"in the test suite so that the suite can load your " +
"implementation of the API.");
// Just rethrow anything else...
throw e;
}
it("works", function () {
assert(impl.getId() !== undefined);
});假设我在a.js中有一个实现
exports.getId = function () {
return module.id;
};我可以创建这样一个impl.js文件来加载我的实现:
module.exports = require("./a");https://stackoverflow.com/questions/35213540
复制相似问题