首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >一个NPM包如何依赖于另一个包中的测试而注入它自己的出口以进行测试?

一个NPM包如何依赖于另一个包中的测试而注入它自己的出口以进行测试?
EN

Stack Overflow用户
提问于 2016-02-04 23:15:28
回答 2查看 35关注 0票数 0

好的,我不确定这是否可能,但让我说,假设我是整个世界的中央天气监测仪。我需要能够打电话给每个国家的气象API,以获得像温度,风和降雨之类的信息。所有的国家都聚集在一起,同意一揽子出口同样的功能。因此,每个国家都建立了一个国家预防机制一揽子计划,其中包括:

代码语言:javascript
复制
exports.currentTemp() { return <current temperature>;}
exports.currentWind() { return <current wind speed>;}
exports.currentRain() { return <current rain fall>;}

中央天气监测已经创建了一个测试套件,称为天气api测试,并运行一些测试。在推行代码之前,每个国家都有责任确保代码通过测试。每个国家如何依靠气象api测试包并在那里运行测试?我想要问这个问题的一个简短的方法是,我如何动态地向摩卡测试中添加一个要求(‘uk-weather’)?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-05 10:52:43

有一个叫做rewire的库可以让你在这里做你想做的事。它基本上允许您覆盖其他脚本中的局部变量。

https://github.com/jhnns/rewire

例如:如果您的共享测试(让我们称之为theirTest)需要这样的脚本:

代码语言:javascript
复制
var foo = require( "theirScript" );

您可以在自己的测试中使用重连线,如下所示:

代码语言:javascript
复制
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

您最终得到的是您自己的新测试脚本,它简单地将您的脚本注入到它们的测试中。在这种情况下,您将根据您的脚本运行他们的测试。

票数 0
EN

Stack Overflow用户

发布于 2016-02-05 12:14:05

您可以让您的测试套件加载一个名为./impl的模块,希望根据他们的实现运行您的套件的人将创建这个模块,以便加载他们的特定实现并将其提供给您的测试套件。套房可以是这样的:

代码语言:javascript
复制
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中有一个实现

代码语言:javascript
复制
exports.getId = function () {
    return module.id;
};

我可以创建这样一个impl.js文件来加载我的实现:

代码语言:javascript
复制
module.exports = require("./a");
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35213540

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档