Articles of 雪茄

节点/ vue.jsunit testing的承诺,如何正确写入?

基本上,我试图testing下面的vex / action: export default { login (context, payload) { return vueAuthInstance.login(payload.user, payload.requestOptions) .then((response) => { if (JSON.stringify(response.data) !== '{}') { return true } else { return false } }) } } 我有一个依赖vueAuthInstance我需要存根/模拟…它被调用,它有一个login函数,有两个参数,它返回一个对象(响应)与数据属性 vueAuthInstance = {login: sinon.stub().withArgs({email: 'email', password: 'password'}, 'options').return({data: 'user_data_with_token'}) } 我的login函数实际上就像调用vueAuthInstance存根,所以我应该可以写 actions.login(context, payload).then((response) => { expect(response).to.eql(true) }) 但我被locking在一个正确的testing describe('login', () => { […]

sinon没有正确恢复stubbed原型的方法?

看起来,sinon可能不会正确地恢复残桩原型。 在我作为一个bug报告之前,有人可以告诉我,如果我做错了什么? 这失败了: 下面的代码似乎正确存根net.Socket.prototype.connect,但不正确地恢复它:后续testing – 与此代码无关,但依赖net.Socket – 开始失败: it('passes host and port to the net.Socket().connect()', sinon.test(function() { var stub = sinon.stub(net.Socket.prototype, 'connect'); var host = '11.22.33.44'; var port = 1234; var il = new InstrumentLink(host, port); expect(stub).to.have.been.calledWith(host, port); })); 请注意,我正在使用“包装函数” sinon.test(function() …)来创build和还原沙箱。 这工作: 另一方面,下面的代码正确地恢复了存根,我的testing套件的其余部分继续运行: var stub; beforeEach(function() { stub = sinon.stub(net.Socket.prototype, 'connect'); }); afterEach(function() { […]

在POST请求中testing和存根参数

伙计们如何在POST请求中存储参数,例如这里是函数的一部分 gridCalculator : function(req,res){ // calculation logic var options=[]; options.dateFirstLicensed = req.param('DateFirstLicensed'); options.dateFirstInsured = req.param('DateFirstInsured'); options.claimList = req.param('ClaimList'); options.suspenList = req.param('SuspenList'); …etc 如果我这样做 it('grid Calculate', function (done) { var req = { 'DateFirstLicensed' : "01-01-2010", 'DateFirstInsured': "01-01-2011", 'ClaimList': ['05-03-2012'], 'SuspenList': [{'StartDate':'05-03-2012','EndDate':'05-05-2012' }] }; gridCalculator.gridCalculator(req,function (err, result) { result.should.exist; done(); }); }); 我得到错误,因为我只是传递一个对象而不是POST请求 TypeError: req.param is […]

如何模拟readline.on('SIGINT')?

我有这段代码: function getMsg() { return new Promise(function (resolve, reject) { var input = []; var rl = readline.createInterface({ input: process.stdin, output: process.stdout }); rl.on('line', function (cmd) { if (cmd.trim()) { input.push(cmd); } else { rl.close(); } }); rl.on('close', function () { rl.close(); resolve(input.join('\n')); }); rl.on('SIGINT', reject); }); } 我试图testing这个function,到目前为止,我的尝试是这样的: it('should reject if SIGINT is sent', […]

NodeJstesting用例的代码,用于每个数组的方法

这里的文件是一个数组像var files = ['/tmp/1.pdf','/tmp/2.pdf']; 方法: var createAttachmentsForMail = function (files) { var attachmets = []; files.forEach(function (value) { attachmets.push( { "Content-type": mime.lookup(value), "FileName": path.basename(value), "content": new Buffer(fs.readFileSync(value)).toString('base64') } ); }); return attachmets; }; testing方法: 我想testingattachment.push被调用2次,但是怎么样? 我也想断言附件是什么回报。 describe("Create attachments", function() { it('from pdf path', function() { var files = [ '/tmp/1.pdf', '/tmp/2.pdf' ]; sinon.stub(fs, "readFileSync"); sinon.stub(files); […]

如何testing用sinon.spy调用的socket.io事件

首先,我试图第二次testing被调用的函数返回正确的值。 更具体地说,我试图第二次testingsocket.on()返回正确的值。 我知道Sinon.spy()可以检测一个函数是否被调用。 但它似乎不适用于socket.io事件。 我试图testing例如, var socketio = io.connect(someUrl); socketio.on(eventName, cb); 如果'eventName'被调用。 我试过了 var spy = sinon.spy(socketio, 'on'); assert(spy.withArgs(eventName).called); 但它说,这是从来没有被称为。 此外,例如,如果我想在callback函数中testing数据是正确的还是不正确的 var socketio = io.connect(someUrl); socketio.on(eventName, function(data) { data.should.equal(something); }); 有没有可能testing? 更新: 我通过在callback中添加一个计数来解决问题 var count = 0; socketio.on(eventName, function(data) { count++; if(count === 2) { data.should.equal(something) } } 但是我认为这是一个很不方便的方法,有没有什么标准/明智的方法来做到这一点(如果可能的话,用sinon)?

我怎样才能伪造全球背景来隔离testing?

我的unit testing运行在node.js中(使用mocha,chai和sinon)。 我正在testing的代码是为了在浏览器中运行。 一些代码定义全局的东西,而其他代码期望有一个window对象,并将对象添加到window 。 (具体来说,我使用一个垫片来模拟ES6的Promise对象。)到目前为止,我通过添加global.window = global;伪装窗口对象global.window = global; 到目前为止只能得到我 当我想拆除我的假环境下一组testing时,问题就出现了。 我已经尝试在before()或beforeEach()函数中执行我的require()调用,并试图手动删除after()或afterEach()函数中创build的对象。 两件事中的一件发生在每次。 全局对象从一个testingJS文件持续到下一个,或者全局对象在所有的testing中都是神秘的。 我不确定这是否与摩卡运行testingJS文件或require()如何工作的方式有关,但我没有想法。 以前有人解决过这个问题吗?

每次调用时,Sinon.stub()都会返回不同的值

这里是我正在写testing的代码: 'use strict'; var internals = {}; var _ = require('lodash'); module.exports = { initialize: function (query) { internals.query = query; }, createField: function (fieldId, accountId, payload) { function callQuery (parList) { var query = 'INSERT into fields VALUES (:uuid, :accountId, :shortcutName, :displayName, :fieldType, :widgetType, :columnOrder, :options, :required, NULL)'; return internals.query(query, parList, function () { […]

Stubbing S3在Node.js中上传

我将如何去在S3中上传Node.js中的S3上传文件? 对于洞察力,我使用摩卡进行testing,Sinon进行testing,但我愿意改变任何事情。 我有一个文件,导出执行上传的函数。 它看起来像这样: var AWS = require('aws-sdk'); var s3 = new AWS.S3({ params: { Bucket: process.env.S3_BUCKET }}); var params = { Key: key, Body: body }; s3.upload(params, function (error, data) { // Handle upload or error }); 如果我尝试存根AWS.S3或AWS.S3.prototype ,没有任何更改。 我认为这是因为我的testing需要aws-sdk自己,并有自己的每个函数的副本。 我的testing看起来像这样: describe('POST /files', function () { var url = baseURL + '/files'; it('uploads the […]

在使用承诺调用方法的方法的摩卡testing环境中无法调用sinon间谍

我有一个模块,调用一个使用蓝鸟承诺的方法。 这里是简化的模块。 卡桑德拉只是一些数据库调用的包装, var Cassandra = require('../lib/cassandraObject'); var cassandra = new Cassandra(); exports.doIt = function _doIt(req, res) { cassandra.queryPromise("query", [1, 2, 3]) .then(function (results) { res.sendStatus(200); }) .catch(function(er) { res.sendStatus(500); }) } 我试图用sin和蓝鸟来testing。 我将存储卡桑德拉的查询承诺的存根,我res.sendStatus间谍: it("makes a call to doIt", function () { var qpMock = sinon.stub(Cassandra.prototype, "queryPromise").resolves(['yay!']); var req = {}; var res = { […]