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

在node.js中使用sinon的mocha存根

百里修真
2023-03-14

我想知道我是否缺少关于sinon.js的任何信息,我尝试使用sinon.stub()。返回和收益率,但无法得到结果。任何指针都将有所帮助。

我有一个模块,它调用另一个从数据库返回值的模块

var users = require('/users');
module.exports.getProfileImage = function (req, res) {
var profile = {};
    else {
        users.findOne("email", req.session.user.email, function (err, user) {
            if (err) {
                res.status(400).send();
            }
            else if (!user) {

                //return default image
            }
            else if (user) {
                //Do some other logic here
            }
       });

};

我使用mocha作为测试框架,也使用sinon。我面临的问题是,当我创建一个users.findOne存根以返回一个值时,控件不会到达我的else if(用户)条件。

我的单元测试案例如下

describe("Return image of user",function(){

var validRequest = null;
validRequest={
        session:{
            user:{
                email:'testUser@test.com',
                role:'Hiring Company'
            }
        }
    };
 it("Should return an image from the file if the user is present in db",function(done){
var findOneUserResponse ={
        companyName:"xyz",
        email:"xyz@abc.com"
    };
    var findOne = sinon.stub(mongoose.Model, "findOne");
    findOne.callsArgWith(1,null,findOneUserResponse);

    user.getProfileImage(validRequest,response);

    var actualImage = response._getData();
    findOne.restore();
    done();

};

};

共有1个答案

怀德馨
2023-03-14

所以我浏览了sinon.js文档http://sinonjs.org/docs/,发现了我所缺少的

describe("Return image of user",function(){

var validRequest = null;
validRequest={
    session:{
        user:{
            email:'testUser@test.com',
            role:'Hiring Company'
        }
    }
};
it("Should return an image from the file if the user is present in db",function(done){
var findOneUserResponse ={
    companyName:"xyz",
    email:"xyz@abc.com"
};
var findOne = sinon.stub(mongoose.Model, "findOne",function(err,callback){
   callback(null,findOneUserResponse);
)};

user.getProfileImage(validRequest,response);

var actualImage = response._getData();
findOne.restore();
done();
};
};
 类似资料:
  • 我在获取一个sinon存根以返回/解析另一个sinon存根时遇到问题。我正在使用西农、柴、柴和摩卡。 我正在按顺序执行许多异步任务,我想测试的代码看起来像这样: 我尝试为此创建存根的尝试如下所示: “saveit”方法在Terminal.prototype,这就是为什么我需要在那里存根它。当我尝试运行它时,我收到错误消息: 在线上: 但如果我在控制台中转储终端对象,它看起来很好,就像任何其他存根对

  • 我正在尝试使用typescript、mocha、sinon和chai http为我的express路由器编写一个集成测试。这个路由器使用我编写的自定义中间件,它检查头中的JWT。 理想情况下,我想存根我的authMiddleware,这样我就可以控制它的行为,而不必为每个测试用例提供有效/无效的JWT。 当我尝试在测试中存根时,我意识到Express使用的实际实现,而不是模拟的实现。 在模拟aut

  • 我有一个Redux操作,它本身分派了另外两个操作。每个操作都是从导入的函数中检索的。一个来自本地模块,另一个来自外部库。 在我的测试中,我使用一个 沙箱来存根函数,但只有两个测试通过。我期待所有3个都通过。 最后一个预期失败,错误为: TypeError:[Function:functionB]不是间谍或对间谍的调用! 当我将功能输出到控制台时,我得到了这个,这似乎与Babel导入导出导出的方式有

  • 如果我已经通过< code > var a = sinon . createstuinstance(my contractor)创建了一个实例。 如何替换其中一个存根函数,如 。 我这样做的主要原因是想实现这个提到的多个回调解决方法

  • 我想验证各种日期字段是否被正确更新,但我不想在预测< code>new Date()何时被调用上浪费时间。我如何剔除日期构造函数? 如果相关,这些测试在节点应用程序中运行,我们使用TypeScript。

  • 我试图为express中间件功能设置存根伪造,但它并没有被取代。 我正试图通过callsFake函数使用sinon stubbing,正如他们最新文档中建议的那样。 即使我需要模块并在导出时替换属性中的函数。我一直看到原来的函数行为在起作用。 我知道我应该在安装中间件函数之前尝试将函数存根,而这正是第一次导入express的时候。 这是我尝试存根的函数,定义为函数并导出为对象。它在脚本文件中定义,