当前位置: 首页 > 知识库问答 >
问题:

如何将导入的模块替换为存根

安浩瀚
2023-03-14

我想将导入的模块替换为存根,以便只对主模块进行单元测试。我试过用西农。但是它似乎并没有达到我期望的效果,因为我在运行测试时不断遇到错误。

    { Error: Command failed: identify: unable to open image `test.exe': No such file or directory @ error/blob.c/OpenBlob/2724.
    identify: no decode delegate for this image format `EXE' @ error/constitute.c/ReadImage/504.

        at ChildProcess. (/node_modules/imagemagick/imagemagick.js:88:15)
        at ChildProcess.emit (events.js:159:13)
        at maybeClose (internal/child_process.js:943:16)
        at Process.ChildProcess._handle.onexit (internal/child_process.js:220:5) timedOut: false, killed: false, code: 1, signal: null }

这是我的主要模块。


    // src/services/identifyService.js
    import imagemagick from 'imagemagick';

    class IdentifyService {
        async identify(filePath) {
            imagemagick.identify(['-format', '%w_%h', filePath], function(err, output) {
                if (err) reject(err);

                return resolve(output);
            });
        }
    }

这是我的测试。


    // test/identifyService.test.js
    import imagemagick from 'imagemagick';
    import IdentifyService from '../src/services/identifyService';

    describe('Verify image processing', () => {
        before(() => {
            const fileInfo = [{page: 1, width:100, height: 100, colorspace: 'RGB'}];
            sinon.stub(imagemagick, 'identify').returns(fileInfo);
        });

        it('returns metadata', (done) => {
            const metadata = IdentifyService.identify('test.exe');
            expect(metadata).to.have.lengthOf(0);
        });
    });

我是不是做错了什么?任何帮助将不胜感激。

共有1个答案

杨选
2023-03-14

首先,我发现IdentifyService类在promise用法方面存在问题。

class IdentifyService {
  identify(filePath) {
    return new Promise((resolve, reject) => { // create a new promise
      imagemagick.identify(['-format', '%w_%h', filePath], function (err, output) {
        if (err) reject(err);

        resolve(output); // no need to specify `return`
      });
    });
  }
}

对于测试本身,它必须为imagemagick使用yields。识别,因为它是一个带有回调的函数

describe('Verify image processing', () => {
    before(() => {
        const fileInfo = [{page: 1, width:100, height: 100, colorspace: 'RGB'}];
        sinon.stub(imagemagick, 'identify').yields(null, fileInfo); // use yields
    });    

    it('returns metadata', async () => {
        const metadata = await IdentifyService.identify('test.exe');
        expect(metadata).to.have.lengthOf(0);
    });
});

我假设您的环境支持asyncwait

 类似资料:
  • 问题内容: 一个不受欢迎但受支持的python hack(请参阅Guido:https://mail.python.org/pipermail/python- ideas/2012-May/014969.html ),它可以在模块属性上使用,涉及以下内容: 在导入时,此导入的模块将成为类实例: 但是,在Python-2.7中,原始模块内的所有其他导入模块都设置为None。 在Python-3.4中

  • 我得到了一个导入的文本块,但格式并不总是那么完美。之后我会尝试用jquery解决这个问题。所以我开始用 替换 : null null 但替换不起作用。最终的html应该如下所示:

  • 由于使用了容器模式来组织各模块的实例,意味着你可以比较容易的替换掉已经有的服务,以公众号服务为例: <...> $app = Factory::officialAccount($config); $app->rebind('request', new MyCustomRequest(...)); 这里的 request 为 SDK 内部服务名称。

  • 我已经将volley库克隆为 我如何将其作为模块导入到我的android studio项目中,该项目由gradle提供支持,类似于IntelliJ Idea中的“导入模块”选项。

  • 问题内容: 如何枚举所有导入的模块? 例如,我想从以下代码中获取: 问题答案: 仅获取当前模块的所有导入的一种近似方法是检查模块: 这不会返回本地导入或非模块导入(如)。请注意,这将返回,因此,如果您使用的话,将获得原始模块名称。如果要使用别名,则使用yield名称代替。

  • 我是新的Python,我已经安装在C:\ INFO2013-07-08 08:15:47,197server.py:593]默认:"GET/HTTP/1.1"500-INFO2013-07-08 08:28:22,289api_server.py:509]应用所有挂起的事务并保存数据存储INFO2013-07-08 08:28:22,289api_server.py:512]保存搜索索引2013-