首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >单元测试-> Sinon + fluent-ffmpeg

单元测试-> Sinon + fluent-ffmpeg
EN

Stack Overflow用户
提问于 2022-01-21 02:09:49
回答 1查看 96关注 0票数 1

我需要一些关于以下代码的帮助:

代码语言:javascript
复制
const ffmpeg = require('fluent-ffmpeg'),
{PassThrough} = require('stream');

ffmpeg.setFfmpegPath('/opt/bin/ffmpeg');
ffmpeg.setFfprobePath('/opt/bin/ffprobe');

exports.wavCompilation = async (wavObjList, s3OutputFullPath) => {
    let command = ffmpeg();
    return new Promise(async (resolve, reject) => {

        const pt = new PassThrough()
        command
            .complexFilter(complexFilterList)
            .audioFrequency(44100)
            .audioChannels(2)
            .outputOptions('-map [audio]')
            .toFormat("wav")
            .output(pt, {end: true})
            .on('error', function (err, stdout, stderr) {
                console.log("stdout:\n" + stdout);
                console.log("stderr:\n" + stderr);
                if (err) {
                    console.log(err.message);
                    return reject("Error");
                }
            })
            .on('start', (commandLog) => printLog(commandLog))
            .on(`end`, () => console.info("end ffmpeg"))
            .run()

        resolve(***);
    });
}

有谁知道我怎么能存根/模仿/间谍/假"ffmpeg“?

我使用Sinon进行单元测试,并试图使用proxyquire来模拟"fluent-ffmpeg“

代码语言:javascript
复制
const sinon = require('sinon'),
proxyquire = require('proxyquire').noCallThru();

let ffmpegStub = {
    setFfmpegPath: () => {},
    setFfprobePath: () => {}
}

const ffmpegService = proxyquire('../services/ffmpeg-service/index', {
    'fluent-ffmpeg': ffmpegStub
});

对于方法setFfmpegPath和setFfprobePath,它可以工作,但是对于行:

代码语言:javascript
复制
let command = ffmpeg();

上面写着"ffmpeg不是一个函数“

我尝试添加一个默认函数,如:

代码语言:javascript
复制
let ffmpegStub = {
    default: () => {},
    setFfmpegPath: () => {},
    setFfprobePath: () => {}
}

但是它也不起作用,我现在也不知道我能做什么。

请给我一些新的想法,我的目标是抓住"complexFilter“的论点并断言它。

EN

回答 1

Stack Overflow用户

发布于 2022-01-21 23:01:51

不需要丙氧奎尔。

我得到了我想要的:

代码语言:javascript
复制
filterStub = sandbox.stub(ffmpeg.prototype, "complexFilter").returnsThis();
sandbox.stub(ffmpeg.prototype, "run").returnsThis();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70795558

复制
相关文章

相似问题

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