首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何模拟Fastify插件

如何模拟Fastify插件
EN

Stack Overflow用户
提问于 2020-01-29 19:11:44
回答 3查看 772关注 0票数 0

我正在尝试写单元测试的fastify应用程序,其中也有自定义的fastify插件。有没有办法模拟fastify插件?我尝试使用Jest和Sinon进行模仿,但没有太多成功。

EN

回答 3

Stack Overflow用户

发布于 2021-08-23 09:30:12

到文件的链接被破坏,主分支中现在没有mocks Giorgios文件夹。我在他回答的时候挖掘了提交历史记录,发现了一个文件夹仍然在那里的commit。我把它留在这里给将来要来的人!

票数 1
EN

Stack Overflow用户

发布于 2020-10-07 03:08:05

你的问题有点泛泛,但是如果你使用的是Jest,那么它对于模仿一个fastify插件来说一定足够了。您可以在此repo中查看,更具体地说,可以查看此file。这是fastify的模拟文件,您可以添加已注册的插件,在特定的示例addCustomHealthCheck中,然后在您的测试文件中,您可以只调用jest.mock('fastify')

票数 0
EN

Stack Overflow用户

发布于 2021-10-26 18:08:45

你没有给出一个具体的用例,你可能有很多理由想要模拟一个插件。因为我不知道具体的信息,所以我将展示如何模拟一个插件,该插件创建一个装饰器,该装饰器存储可以用Fastify.decator-name检索的数据。这是连接到数据库或存储其他广泛需要的变量的插件的常见用例。

在下面的例子中,我们的目标是测试一个查询数据库的查询函数;一个插件通过fastify装饰器存储连接信息。因此,为了对查询进行单元测试,我们特别需要模拟连接的客户端数据。

首先创建一个fastify实例。接下来,设置一个mock来返回所需的伪响应。然后,不是用fastify注册组件(您也可以这样做),而是直接用模拟信息修饰所需的变量。

下面是要测试的函数。我们需要为一个数据库模拟一个插件,该插件创建一个名为db的fastify装饰器。

代码语言:javascript
复制
const fastify = require("fastify")({ //this is here to gather logs
    logger: {
        level: "debug",
        file: "./logs/combined.log"
    }
});


const HOURS_FROM_LOADDATE = "12";     

const allDataQuery = `
SELECT * 
FROM todo_items 
WHERE a."LOAD_DATE" > current_date - interval $1 hour
`;
const queryAll = async (db) => {
    return await sendQuery(db, allDataQuery, [HOURS_FROM_LOADDATE]);
};


//send query to db and receive data
const sendQuery = async (db, query, queryParams) => {
    var res = {};
    try {
        const todo_items = await db.client.any(query, queryParams);
        res = todo_items;
    } catch (e) {
        fastify.log.error(e);
    }
    return res;
};

module.exports = {
    queryByAsv
};

以下是测试用例。我们将从db插件中模拟db.client:

代码语言:javascript
复制
 const { queryAll } = require("../src/query");
    
    const any = {
        any: jest.fn(() => {
            return "mock response";
        })
    };
    
    describe("should return db query", () => {
        beforeAll(async () => {
            // set up fastify for test instance      
            fastify_test = require("fastify")({
                logger: {
                    level: "debug",
                    file: "./logs/combined.log",
                    prettyPrint: true
                }
            });
    
    
            
        });

        test("test Query All", async () => {
            // mock client
            const clientPromise = {
                client: any
            };
            //
            fastify_test.decorate("db", clientPromise);
            const qAll = await queryAll(fastify_test.db);
            expect(qAll).toEqual("mock response");
        });
        
    
    
    
    
    
        
    });
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59965807

复制
相关文章

相似问题

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