Articles of sinon

Sinonfunction存根:如何在模块内调用“自带”function

我正在为node.js代码编写一些unit testing,并使用Sinon通过存根函数调用 var myFunction = sinon.stub(nodeModule, 'myFunction'); myFunction.returns('mock answer'); nodeModule看起来像这样 module.exports = { myFunction: myFunction, anotherF: anotherF } function myFunction() { } function anotherF() { myFunction(); } Mocking对于像nodeModule.myFunction()这样的用例显然nodeModule.myFunction() ,但是我想知道如何在用nodeModule.anotherF()调用时如何在另一个F()内模拟myFunction()调用?

Sinon称为With和calledWithMatch失败的对象编辑:Sinon间谍对象的构造函数

我是unit testing新手,正在使用Mocha,Sinon和Chai来testingNodeJs代码。 问题是我对stub.calledWith()的期望总是失败,即使testing错误显示了两个在语法上相同的对象。 我使用Sinon来存储一个mongoose模型的保存方法,并检查这个存根被调用了正确的细节。 我正在testing的function: async function createGroup(details) { 'use strict'; Logger.info(`create group called`); const group = new UserGroup(this.formatGroup(details)); const result = await group.save(); Logger.verbose(`results of save: ${JSON.stringify(result)}`); return result; } unit testing describe('object creation', function () { 'use strict'; const saveStub = sinon.stub(UserGroup.prototype, 'save'); mongoose.Promise = Promise; beforeEach(function (done) { saveStub.reset(); return done(); }); […]

testingexpression中间件

我有以下代码来testing: const Status = require('http-status-codes'); const passport = require('passport'); const Users = require('../models/users.js'); const authentication = { // Authenticate User Middleware authenticateUser: function authenticateUser(req, res, next) { return passport.authenticate('bearer', { session: false, failWithError: false }, (err, user, info) => { if (err) { return res.status(500).json({ message: err }); } if (user) { return Users.findOne({ auth_ref: […]

Sinon存根并testingAWS-SDK的承诺

//正在testing的类 var AWS = require('aws-sdk'); var s3Export = function() { var s3Client = new AWS.S3(); this.getObject => (params) => { return s3Client.getObject(params).promise(); } }; module.exports.S3 = new s3Export(); //testing类 describe('s3-wrapper-tests', function() { var app, aws, s3, getObjectData = {Bucket: 'test-bucket', Key: 'test-file'}, deleteObjectData, deleteObjectsDatas, putObject; before(() => { s3 = sinon.stub({ getObject: function(params) { getObjectData […]

你将如何嘲笑/分支一个快速路线的请求?

例如,如果我想在这个给定的方法中嘲笑一个请求,我该怎么做? app.get('/test', exposeDb, function(req, res) { req.dbService.getUserByID(req.body, function(err, result) { if (result == 5) { console.log(result); res.json({result: result}); } else { console.log(result); res.json({result: result}); } }); }); 这是我目前的testing: describe('Test', function() { beforeEach(function() { var getUserByIDStubE = sinon.stub(dbService, 'getUserByID').callsFake(cb => { cb(undefined, 5); }); }); it('TESTSETSTETS', function(done) { chai.request(server) .get('/test') .send({ req }) .end(function (err, res) […]

我应该如何侦察在另一个对象内调用的构造函数?

比方说,我有一个对象,有一个function,创build另一个对象作为其操作的一部分。 sinon = require('sinon') chai = require 'chai' sinonChai = require("sinon-chai") chai.use(sinonChai) chai.should() Paper = {} Paper.Origami = require('../assets/src/coffee/origami.coffee').Paper.Origami describe '#throwOrigami', -> it 'should create origami and throw it', -> m = new Monkey() throwSpy = sinon.spy(m, 'throwOrigami') createSpy = sinon.spy(Paper, 'Origami') # next function creates origami, then 'throws' it at someone m.throwOrigami(); createSpy.should.have.been.calledWithNew throwSpy.should.have.been.calledOnce […]

如何使用sinon来存储neo4j Thingdom模块的函数

我有一些问题,写一些unit testing,我想在这里stub的functionneo4j Thingdom模块。 经过几个小时的失败尝试,我一直在networkingsearch,我发现的唯一参考点是一个示例项目,曾用于sinon.createStubInstance(neo4j.GraphDatabase); 去掉整个对象。 对我来说,因为这似乎是一个扔掉的项目,我想要一个更细粒度的方法,所以我可以testing,例如Thingdom API概述时节省一个节点,你创build它(非持续)坚持它,然后你可以索引它,如果你希望哪些是三个调用,可以在多个特定的testing,我不知道可以用createStubInstance设置(即发现,如果函数被调用一次)可以概述。 例子“创build节点”function(这只是为了说明function,我试图用testing来build立它) User.create = function(data, next){ var node = db.createNode(data); node.save(function(err, node){ next(null,node); }); }; 我能够存根顶级对象(neo4j.GraphDatabase)的function,所以这个工作: it('should create a node for persistence', function(){ var stub = sinon.stub(neo4j.GraphDatabase.prototype, 'createNode'); User.create({}, res); stub.calledOnce.should.be.ok; stub.restore(); }); 问题出现在下一组testing中,我希望运行哪些testing,如果调用将节点持久保存到数据库中(节点,保存)方法: 我不知道这是可能的,或者它可以实现,但我已经尝试了几个变种的存根和非似乎工作(在neo4j.Node,neo4j.Node.prototype),他们都回来了不同的错误,如可以没有定义等,这可能是由于createNode函数生成的节点,而不是我的代码直接。 有什么我明目张胆地做错了,我错过了这个把戏,或者你可以不这样做吗? 如果不是什么是最好的战术来处理这样的东西?

模拟一个模块NodeJs的实例

如何在我正在testing的方法中模拟一个module的实例? 方法示例: var item = require('item'); // module to mock // underTest.js module.exports = { parse: function(model) { return new item(model).parse(); } } 我想嘲笑item模块并声明parse方法已被调用。 我的testing套件使用sinon和mocha任何例子来实现,将不胜感激。

sinon存根不能在nodejstesting中工作

我正在编写Invoicer模块的testing。 我的testing有两个问题。 第一个是邮件仍然被发送,尽pipe已经emailjs模块(第一次testing),第二个问题是我的第二次testing超时后2secs。 我不明白为什么? 有谁能帮我解决这个问题吗? Invoicer 'use strict'; var fs = require('fs'); var _ = require('underscore'); var request = require("request"); var email = require("emailjs"); exports.Invoicer = function (url, context) { // set-up our transporter object with credentials var transporter = email.server.connect({ user: 'Pinoquio', password: 'sdlfkjlj', host: "pinoquio@gmail.com", port: 444, tls: true }); // read html […]

nodejs mssql并承诺混淆

我是非常新的承诺在JavaScript中,所以这个问题是帮助我弄清楚为什么我得到一个错误(以奇怪的顺序)使用承诺。 最重要的是,我正在忙于使用ms-sql回购,sinonjs和第一次restify,所以也没有帮助 这个问题和我之前问过的有关 在上面的问题中,我需要在@robertklep的帮助下完成我成功完成的SQL DB。 然而,作为一个完整的检查,我想检查终点是否仍然像以前那样返回我期望的数据,所以我解开了残局。 现在我收到以下错误,我不知道为什么: [错误:发送后无法设置标题。] testing: 'use strict'; var expect = require('chai').expect, request = require('supertest'), chance = require('chance').Chance(), server = require('../server'), sinon = require('sinon'), select = require('../../helpers/data_access/select'), read_file = require('../../helpers/read_file'); describe("/account_types", function () { // before(function (done) { // sinon // .stub(select, "query_list") // .returns([{id: "test"}]); // // sinon // .stub(select, "query_single") […]