NodeJS 在哪里放置数据,如图像,base64编码的数据进行jest测试?

qoefvg9y  于 2023-04-11  发布在  Node.js
关注(0)|答案(1)|浏览(105)

我在Nodejs中创建了一个函数:

const mmm = require('mmmagic');
const mime = require('mime-types');
const {Buffer} = require("node:buffer");

const detectBodyMime = (body,callback) => {
    let buffer = isBase64(body)?Buffer.from(body,'base64'):Buffer.from(body);
  
    const magic = new mmm.Magic(mmm.MAGIC_MIME_TYPE);

    magic.detect(buffer, function(err, result) {
        
        if (err) {  return callback(err); }

        if(result == 'text/plain') {
            try {
                let text = buffer.toString();
                if (text.codePointAt(0) === 0xFEFF) { // UTF8 BOM
                    text = text.substring(1);
                }
                JSON.parse(text);
                return callback(null,'application/json','json',buffer);
            }catch(e){
                // Do nothing keep it silence we need to just verify that content is Json
            }
        }
        
        return callback(null,result,mime.extension(result),buffer);
    });
}

module.exports={
detectBodyMime
}

我做了一些测试:

const {detectBodyMime} = require('../../../src/common/http_utils.js');

test("detectsBase64EncodedImage",(done)=>{
    const content = // Populate data

    detectBodyMime(content,(err,mime,extention)=>{
        expect(mime).toBe('image/jpeg');
        expect(extention).toBe('jpg');
        expect(err).toBe(null);

        done();
    });
});

但在我的例子中,我想填充:

const content = // Populate data

使用编码为base64的图像。但是如果我将base64原样放置,则会使代码在我对其进行更多测试时无法读取。因此,我可以将图像放置在哪里/如何进行测试,以便在测试期间将其用作数据?

kr98yfug

kr98yfug1#

在一个单独的JS fixture文件(或json文件,甚至数据库)中。

const images = {
  'detectsBase64EncodedImage': 'iVBORw0KGgoAAAANSUhEUgAAAAIAAAACAQMAAABIeJ9nAAAABlBMVEUAAP//AADF+ovTAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAADElEQVQImWNgYGAAAAAEAAGjChXjAAAAAElFTkSuQmCC',
}

function getTestImage(test_name){
  if (!images[test_name]) throw Error(`No image data for test [${test_name}]`)
  return images[test_name]
}

module.exports = {
  getTestImage,
  images,
}

请注意,currentTestName也将包括describe名称,但您可以自由地使用任何内容为images对象设置关键字。

const { getTestImage } = require('./thetests.fixture.js');

test("detectsBase64EncodedImage",(done)=> {
    const content = getTestImage(expect.getState().currentTestName)

    detectBodyMime(content,(err,mime,extention)=>{
        expect(mime).toBe('image/jpeg');
        expect(extention).toBe('jpg');
        expect(err).toBe(null);

        done();
    });
});

相关问题