Javascript Jest测试定义其中变量的函数

Javascript Jest测试定义其中变量的函数,javascript,testing,jestjs,mjs,Javascript,Testing,Jestjs,Mjs,我想在.mjs文件中为JavaScript函数编写一些Jest测试。在这些函数中,通过调用其他函数来定义变量。例如: export function getCurrentVideo() { var currentVideo = VideoList.GetCurrentVideo() console.log(currentVideo); return "This is the video:" + currentVideo } 在这种情况下,我将收到未

我想在.mjs文件中为JavaScript函数编写一些Jest测试。在这些函数中,通过调用其他函数来定义变量。例如:

export function getCurrentVideo() {
     var currentVideo = VideoList.GetCurrentVideo()
    console.log(currentVideo);
    return "This is the video:" + currentVideo
}
在这种情况下,我将收到未定义的,对吗?因为无法访问VideoList.GetCurrentVideo

测试将类似于:

const  getCurrentVideo  = import('../').getCurrentVideo;

describe('getCurrentVideo', () => {
    test('if getCurrentVideo will return "This is the video:" + currentVideo', () => {
        expect(getCurrentVideo).toBe('This is the video:" + currentVideo');
    });
});

我知道您可以向函数中添加参数,但这意味着我必须重新编写函数,仅用于测试目的。这不是我的代码,这是一个巨大的项目,所有者希望对其进行一些测试。

您可以模拟函数,假设它们工作正常(并单独测试):


或者,您可以提供VideoList的完整上下文,以便同时测试这两个函数。

您可以模拟函数,假设它们工作正常(并分别测试):


或者您可以提供VideoList的完整上下文,以便同时测试这两个功能。

Post
VideoList
context@AdamAzadVideoList将引用以下内容:``导出变量VideoList=新建VideoList('https://.....json"); ``` 只是一个json文件post
VideoList
context@AdamAzadVideoList将引用以下内容:``导出变量VideoList=新建VideoList('https://.....json"); ``` 只是一个json文件,但是如果我提供了VideoList的完整上下文,我必须重新编写函数吗?atm函数没有参数我尝试了你的解决方案来模拟它,但仍然是:未定义。因为它仍将尝试在实函数中定义变量,如果我正确的话。在您的测试实现中,是否定义了
currentVideo
jest.fn
将基于名称模拟函数,因此不会执行真正的函数,而是执行提供的函数。我确实做了一系列。我没有使用=>currentVideo,而是使用了:=>currentVideo。如果我是对的,那应该行。如果我用你的例子定义currentVideo,它会给我相同的输出,未定义。我认为这应该行得通,我不明白为什么不行。但目前还有另一个问题。导入不起作用(这可能就是代码不起作用的原因)。我要测试的函数位于.mjs文件中。我得到的错误是:Jest遇到了意外的标记,这通常意味着您试图导入Jest无法解析的文件,例如,它不是纯JavaScript。
import{sum}from'../../directoryname/sum.mjs'但即使在将其更改为.js文件后,我也会遇到相同的错误<代码>语法错误:无法在模块外使用import语句
,但如果我提供视频列表的完整上下文,我必须重新编写函数?atm函数没有参数我尝试了你的解决方案来模拟它,但仍然是:未定义。因为它仍将尝试在实函数中定义变量,如果我正确的话。在您的测试实现中,是否定义了
currentVideo
jest.fn
将基于名称模拟函数,因此不会执行真正的函数,而是执行提供的函数。我确实做了一系列。我没有使用=>currentVideo,而是使用了:=>currentVideo。如果我是对的,那应该行。如果我用你的例子定义currentVideo,它会给我相同的输出,未定义。我认为这应该行得通,我不明白为什么不行。但目前还有另一个问题。导入不起作用(这可能就是代码不起作用的原因)。我要测试的函数位于.mjs文件中。我得到的错误是:Jest遇到了意外的标记,这通常意味着您试图导入Jest无法解析的文件,例如,它不是纯JavaScript。
import{sum}from'../../directoryname/sum.mjs'但即使在将其更改为.js文件后,我也会遇到相同的错误<代码>语法错误:无法在模块外部使用导入语句
const  getCurrentVideo  = import('../').getCurrentVideo;
describe('getCurrentVideo', () => {
    it('if getCurrentVideo will return "This is the video:" + currentVideo', () => {
        const currentVideo = 'testCurrentVideo';
        window.VideoList = {
            GetCurrentVideo: jest.fn(() => currentVideo)
        }
        expect(getCurrentVideo).toBe('This is the video:' + currentVideo);
    });
});