Javascript Jest测试定义其中变量的函数
我想在.mjs文件中为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 } 在这种情况下,我将收到未
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文件postVideoList
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);
});
});