gpt4 book ai didi

javascript - 要求不按预期行事

转载 作者:行者123 更新时间:2023-11-28 21:23:58 25 4
gpt4 key购买 nike

我正在使用 proxyquire 库,它在导入时模拟包。

我正在创建自己的 proxyquire 函数,它会 stub 我经常使用并希望定期 stub 的各种包(meteor 包,它们具有特殊的导入语法):

// myProxyquire.js
import proxyquire from 'proxyquire';

const importsToStub = {
'meteor/meteor': { Meteor: { defer: () => {} } },
};

const myProxyquire = filePath => proxyquire(filePath, importsToStub);

export default myProxyquire;

现在我想编写一个使用这些包之一的文件的测试:

// src/foo.js
import { Meteor } from 'meteor/meteor'; // This import should be stubbed

export const foo = () => {
Meteor.defer(() => console.log('hi')); // This call should be stubbed
return 'bar';
};

最后我这样测试它:

// src/foo.test.js
import myProxyquire from '../myProxyquire';

// This should be looking in the `src` folder
const { foo } = myProxyquire('./foo'); // error: ENOENT: no such file

describe('foo', () => {
it("should return 'bar'", () => {
expect(foo()).to.equal('bar');
});
});

请注意,我的最后 2 个文件嵌套在子文件夹 src 中。因此,当我尝试运行此测试时,我收到一条错误消息,指出无法找到模块 ./foo,因为它正在“根”目录中查找,myProxyquire.js 文件是,而不是预期的 src 目录。

最佳答案

您可以使用像 caller-path 这样的模块来解决该(预期)行为确定从哪个文件 myProxyquire 被调用,并解析传递的相对于该文件的路径:

'use strict'; // this line is important and should not be removed

const callerPath = require('caller-path');
const { dirname, resolve } = require('path');

module.exports.default = path => require(resolve(dirname(callerPath()), path));

但是,我不知道这是否适用于 import(可能还有转译器)。

关于javascript - 要求不按预期行事,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45438276/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com