Articles of sinon

节点jsunit testing:嘲笑需要依赖

我正在为以下设置编写unit testing的问题作为jira.js文件(在node.js模块中): var rest = require('restler'); // https://www.npmjs.com/package/restler module.exports = function (conf) { var exported = {}; exported.getIssue = function (issueId, done) { … rest.get(uri).on('complete', function(data, response) { … }; return exported; }; 现在,我想为我的getIssue函数编写unit testing。 'restler'是一个REST客户端,我通过REST客户端调用JIRA API来获取JIRA问题。 所以为了能够testingcreateIssue(..),我希望能够在我的Jasmineunit testing中嘲笑'rest'var。 我怎样才能嘲笑这种方法? 请给我一些指示,以便我可以继续。 我曾尝试使用rewire,但我失败了。 这是我迄今为止不起作用(即getIssue方法原来是未定义的): var rewire = require("rewire"); var EventEmitter = require('events').EventEmitter; var emitter = new […]

嘲笑在同一模块内导出和调用的模块function?

新的unit testing和间谍,存根和嘲笑的概念。 我想从下面的代码testingpassword.js的verify方法,但是我无法在testing文件中存储hash函数。 由于verify使用hash函数和hash函数导出,我虽然我应该stub hash函数返回一个固定的响应,而不是实际调用hash 。 因为我不想testinghash函数。 问题:testingverify时不会调用创build的hash函数存根。 问题1:我应该把重点放在testing函数本身的逻辑上而不是另一个函数上吗? 主要问题:(已 回答)如何在同一个模块中调用模块函数? 方面的问题2:如果我不知道哪里没有导出,而只停留在模块中,我将如何去做哈希哈希? 码 password.js /** * Creates a hash based on a salt from a given password * if there is no salt a new salt will be generated * * @param {String} password * @param {String} [salt] Optional value, if not given will generate […]

如何多次声明stubbed的提取

使用proxyquire,sinon和mocha。 我可以在第一次调用fetch时存根。 但是在recursion调用的第二次调用中,我不能断言它。 从输出结果看,在testing结束之前,断言可能会运行。 在断言之后,您将会看到second fetch控制台。 index.js var fetch = require('node-fetch'); function a() { console.log('function a runs'); fetch('https://www.google.com') .then((e) => { console.log('first fetch'); b(); }) .catch((e)=> { console.log('error') }); } function b() { fetch('https://www.google.com') .then((e) => { console.log('second fetch'); }) .catch((e)=> { console.log('error') }); } a() testing: describe('fetch test demo', ()=> { it('fetch should of […]

当使用Sinon的假定时器时,蓝鸟承诺冻结

与Sinon的假定时器和Bluebird一起使用时,以下testing会冻结。 var sinon = require('sinon'); var Promise = require('bluebird'); describe('failing test', function() { beforeEach(function() { this.clock = sinon.useFakeTimers(); }); afterEach(function() { this.clock.restore(); }); it('test', function(done) { Promise.delay(1000).then(function(){ done(); //This never gets called }); }); }); 我正在用Bluebird(v2.9.33)和Sinon(v1.15.3)使用Mocha(v2.2.5)。 我尝试了Bluebird和Sinon在一些讨论中提出的build议,但是我无法做到这一点。 这似乎是一个问题与方式Sinon存根setImmediate但除此之外,我不知道如何解决这个问题。

存根Date.now()和Math.random()

我正在用Sinon使用Mocha来testing我的node.js模块。 我已经成功地嘲笑了其他的依赖(我写的其他模块),但是我遇到了困扰非纯函数(如Math.random()和Date.now() )的问题。 我已经尝试了以下(简化,以便这个问题不是如此本地化),但Math.random()不存在,因为一个明显的范围问题。 Math的实例在testing文件和mymodule.js之间是独立的。 test.js var sinon = require('sinon'), mymodule = require('./mymodule.js'), other = require('./other.js'); describe('MyModule', function() { describe('funcThatDependsOnRandom', function() { it('should call other.otherFunc with a random num when no num provided', function() { sinon.mock(other).expects('otherFunc').withArgs(0.5).once(); sinon.stub(Math, 'random').returns(0.5); funcThatDependsOnRandom(); // called with no args, so should call // other.otherFunc with random num other.verify(); // ensure […]

删除模块function

编辑:有点更精确。 我想testing我们团队创build的Github API封装扩展的用例。 对于testing,我们不想直接使用API​​包装器扩展,所以我们想要把它的function截掉。 所有对API封装器的调用都应该为testing而被删除,而不仅仅是创build一个复制存根。 我在Node.js中有一个模块“github”: module.exports = function(args, done) { … } 我要求这样: var github = require('../services/github'); 现在,我想使用Sinon.js将github(…) var stub_github = sinon.stub(???, "github", function (args, callback) { console.log("the github(…) call was stubbed out!!"); }); 但是sinon.stub(…)期望从我传递一个对象和一个方法,并且不允许我sinon.stub(…)一个函数模块。 有任何想法吗?

用Sinon保存Mongoose模型的实例方法

我试图testing一个服务函数,我用它来保存一个使用Mongoose模型的小部件。 我想在我的模型上存储保存实例方法,但是我找不出一个好的解决scheme。 我看到了其他的build议,但没有一个看起来完整。 看… 这个 , 这个 。 这是我的模特 // widget.js var mongoose = require('mongoose'); var widgetSchema = mongoose.Schema({ title: {type: String, default: ''} }); var Widget = mongoose.model('Widget', widgetSchema); module.exports = Widget; 这是我的服务… // widgetservice.js var Widget = require('./widget.js'); var createWidget = function(data, callback) { var widget = new Widget(data); widget.save(function(err, doc) { callback(err, […]

在NodeJS中使用Mocha和Sinon来ES6类的方法

有没有办法使用摩卡/ Sinon存根ES6类的方法? 我正在尝试这样做… sinon.stub(Factory, 'announce'); 但我只是得到以下错误… TypeError: Attempted to wrap undefined property announce as function

使用AWS-SDK的Sinon.Stub节点

我正在尝试为使用aws-sdk NPM模块的应用程序编写一些testing报告,将aws-sdk模块推到SQS队列,但我不确定如何正确地模拟事情。 到目前为止,我的testing是: var request = require('superagent'), expect = require('chai').expect, assert = require('chai').assert, sinon = require('sinon'), AWS = require('aws-sdk'), app = require("../../../../app"); describe("Activities", function () { describe("POST /activities", function () { beforeEach(function(done) { sinon.stub(AWS.SQS.prototype, 'sendMessage'); done(); }); afterEach(function(done) { AWS.SQS.prototype.sendMessage.restore(); done(); }); it("should call SQS successfully", function (done) { var body = { "custom_activity_node_id" : […]

如何使用Rollup.js捆绑使用Sinon.js的testing?

我使用Rollup.js和插件rollup-plugin-node-resolve和rollup-plugin-commonjs来捆绑我使用Sinon.js的testing。 当我尝试运行捆绑文件时,出现以下错误: 错误:rollup-plugin-commonjs当前不支持dynamic需求 有没有任何解决这个错误,或者我必须使用一些其他工具,如Webpack?