Tag: sinon

unit testing与Mocha,Chai和Sinon的Node.js应用程序

我是unit testingNode.js应用程序的新手。 经过一些过滤,我的应用程序将CSV文件转换为JSON。 var fs = require('fs'); var readline = require('readline'); module.exports = ((year) => { if (typeof year !== "number" || isNaN(year)){ throw new Error("Not a number"); } var rlEmitter = readline.createInterface({ input: fs.createReadStream('./datasmall.csv'), output: fs.createWriteStream('./data.json') }); rlEmitter.on('line', function(line) { /*Filter CSV line by line*/ }); rlEmitter.on('close', function() { /*Write to JSON*/ }); }); […]

用Mocha和SinontestingMailgun .send()方法

我正在尝试编写一个快速中间件函数的unit testing,通过ping Mailgun API来发送电子邮件。 module.exports = { sendEmail: function (req, res) { let reqBody = req.body; let to = reqBody.to; let from = reqBody.from; let subject = reqBody.subject; let emailBody = reqBody.body; let data = { from: from, to: to, subject: subject, text: emailBody }; mailgun.messages().send(data, function (error, body) { if (error) { res.status(400).json(error); return; […]

Proxyquire:不能存根fs.readFileSync

我似乎无法在fj上从NodeJS核心上存储readFileSync。 下面的代码隔离了这个问题。 通过摩卡运行testing结果如下: > mocha tests/test.js Some description 1) "before all" hook 0 passing (15ms) 1 failing 1) Some description "before all" hook: TypeError: Cannot read property 'charCodeAt' of undefined at Object.stripBOM (internal/module.js:48:14) at Object.require.extensions.(anonymous function) (node_modules/proxyquire/lib/proxyquire.js:276:43) at Proxyquire._withoutCache (node_modules/proxyquire/lib/proxyquire.js:179:12) at Proxyquire.load (node_modules/proxyquire/lib/proxyquire.js:136:15) at Context.<anonymous> (tests/test.js:12:15) 这里是tests / test.js var proxyquire = require('proxyquire'), sinon = […]

调用ramda组成nodejs类

我有以下方法skipLoggingThisRequest在我试图testingnode js类。 该方法应该返回true或false ,根据请求中的path,使用ramda compose来获得该值。 但是在我的testing中,无论我在请求对象中设置了什么path,我的skipLoggingThisRequest总是返回true。 我在这里错过了什么? 我的课: import { compose, filter, join, toPairs, map, prop, flip, contains, test, append } from 'ramda' import { create, env } from 'sanctuary' import { isEmpty, flattenDeep } from 'lodash' import chalk from 'chalk' import log from 'menna' class MyClass { constructor (headerList) { this.headerWhiteList = flattenDeep(append(headerList, [])); […]

如何使用sinon模拟req和res参数的函数?

我想通过一些testing,使用嘲讽和存根。 controler.js: const User = require('./models/user'); module.exports.userRead = function userRead(req, res) { User .query() .then(users => { res.render('results', {data: users}); }) .catch((err) => { res.render('error'); }); user.test.js: const sinon = require('sinon'); const controller = require('../controler'); const Provider = require('../provider'); describe('Testing userRead', () => { const appStub = sinon.stub(Provider,'query'); test('should returns users', () => { controler.userRead(req, […]

节点:用一个callback参数模拟一个函数

我正在尝试编写一个函数读取一个jsonfile到一个对象的unit testing。 我读了文件 jsonfile.readFile(filename, function (err, obj) { //… }); 对于我的unit testing,我想嘲笑这个函数,而不是实际读取文件,它只会返回一个固定的json块并传递给callback函数。 我遇到的麻烦是如何嘲笑这个function。 我见过sinon ,它支持模拟函数,但我找不到任何描述如何为我正在嘲笑的函数实际定义自定义行为。 Sinon看起来像允许我定义我想要的函数返回,我期望它被调用的频率等等,但是实际上并没有定义一个模拟函数。 基本上,我想要这样的东西: mock(jsonfile, 'readFile', function(filename, callback) { callback(null, {attr1:"foo"}); }); 我怎么和sinon做这个?

Sinon意外的断言错误

我对Sinon的使用很新。 假设我们有模块(名为myModule.js)的定义: //myModule.js var _f2 = function() { console.log('_f2 enter'); return {prop1:'var1'}; }; var f1 = function(){ var myVar1 = _f2(); console.log('_f2 called'); }; module.exports._f2 = _f2; module.exports.f1 = f1; 这里是testing模块 var sinon = require('sinon'); var myModule = require('./myModule'); describe('test my module',function(){ var f2Spy ; beforeEach(function(){ f2Spy = sinon.spy(myModule,'_f2'); }); afterEach(function(){ myModule._f2.restore(); }); it('call _f2',function(done){ […]

testing使用SinonJs和Mocha来限制包含Promise Code Block的Route Handler

我有一个restify行动代码块如下: function retriveAll(req, res, next) { db.user .find({where: {id: 1}) .then(function(user){ res.send(user); }) .catch(function(details){ res.send(details.message); }) .finally(function(){ next(); }); } 我想testing这个动作,具体validationres.send()在这个代码块中被调用 。 稍后validationres.send()返回的数据。 我正在使用SinonJs和Mocha进行testing框架。 以上是上述方法的示例testing代码块。 describe('retrieveAll()', function() { reqStub = {}; resStub = {send: sinon.stub()}; nextStub = sinon.stub(); beforeEach(function() { module.retrieveAll(reqStub, resStub, nextStub); }); // this doesn't work // and the sub.calledCount is 0 // […]

使用Sinon来残存mongoose模型

我想存根mongoose模型返回一个json值 我有的代码是 var valueToReturn = { name:'xxxxx' }; var stub = sinon.stub(MyModel.prototype,'findOne'); stub.returns(valueToReturn); 我得到这个错误:TypeError:试图包装未定义的属性findOne作为函数

如何使用Sinon.js存根dynamic对象方法?

我有以下模块。 var Sendcloud = require('sendcloud'); var sc = new Sendcloud("key1","key2","key3"); var service = {}; service.restorePassword = function (params, cb) { if (!params.to || !params.name || !params.token) { throw "Miss params" } var defaultTemplate = adminBaseUrl + "reset/token/" + params.token; var subject = params.subject || "Letter"; var template = params.template || defaultTemplate; // Send email sc.send(params.to, […]