Tag: sinon

首先与Mocha和Sinonjs进行asynchronousunit testing

我实际上是在使用我们使用mongoose的社会创build的微观框架。 为了pipe理mongoose对象,我们创build了一个modelfactory,它返回一个对应于mongoose名称对象的模型。 其实,我正在开发一个身份validation服务,在这个服务中我注入了这个模型工厂。 我需要用摩卡和sinonjs进行unit testing,但是我可能会丢失… 这是我想要testing的身份validation服务方法: class AuthenticationService extends Service constructor: (modelFactory)-> super(modelFactory) @authorizedClientIds = [ "123456" "toto" ] @OAuthAccessTokensModel = @modelFactory.getSchema('OAuthAccessTokens') @OAuthClientsModel = @modelFactory.getSchema('OAuthClients') @OAuthUsersModel = @modelFactory.getSchema('OAuthUsers') @OAuthRefreshTokensModel = @modelFactory.getSchema('OAuthRefreshTokens') ## Get an access token from the bearer token ## getAccessToken: (bearerToken, callback)-> @OAuthAccessTokensModel.findOne({accessToken: bearerToken}, callback) module.exports = AuthenticationService 我想testinggetAccessToken方法,但是我显然不知道如何使它工作… 我试图做一些事情: describe("Authentication Service", function […]

在sinon中创build一个假的object.method()从头开始?

TL;博士 如何在sinon中创build一个object.method()从头开始? 上下文 例如,我有一个Parser类的家庭,其中每个实现#parse(text)方法,并返回一个ParseTree对象或返回null 。 我正在进行unit testing,我没有testingParser对象(他们在别处testing过),但是我需要一个可testing的对象来响应#parse() 。 我可以实例化和存根真正的parsing器,但是拖拽不必要的代码到这部分testing中。 这个问题 我很确定,使用sinon的spy(),stub()和/或mock()api很容易,所以:我如何创build一个可testing的对象: 响应parse()方法 validation它被调用一次 返回一个我指定的任意对象? 我试过了 下面的例子在sinon.stub()的调用中失败了,因为sinon.spy()对象不能用parse方法存根sinon.spy() 。 (这个例子也应该validationfake_parser.parse()被test_text调用了一次,但是没有): var test_text = 'any text' var fake_parse_tree = sinon.spy() var fake_parser = sinon.stub(sinon.spy(), 'parse').returns(fake_parse_tree) expect(fake_parser.parse(test_text)).to.equal(fake_parse_tree)

使用JavaScript和sinon如何监视构造函数中调用的方法?

我真的需要帮助下面的代码 – 这不是从我的程序粘贴我的头顶,但我认为这清楚地表明了问题(我相信它是完全准确的)。 当我请求“spy.called”的值时,忽略构造函数中的调用。 我如何编码,以便在构造函数内部的调用由间谍注册? 或者如果不可能,我应该采取什么方法? 示例代码非常感谢 – 非常感谢 – 一整天都用这个敲我的头! function MyClass() { var self = this; this.myFunc = function() { console.log("hi"); } function init() { self.myFunc(); } init(); } var spy = sinon.spy(new MyClass(), "myFunc"); console.log(spy.called); // true if the spy was called at least once // ABOVE OUTPUTS FALSE – IT FAILS […]

如何存根aws-sdk

可以说我有以下几点 // file sample.js var aws = require('aws-sdk'); var dynamoDB = new aws.DynamoDB(); exports.processData = function(){ var data = dynamoDB.getItem(params); // so something with data }; 我如何编写上面的代码示例的unit testing。 //file sample_test.js var aws = require('aws-sdk'); var sinon = require('sinon'); // the following code doesnt seem to stub the function // the actual function is still used […]

从testing中解耦查询的最佳实践

我正在寻找使用mocha或sinontestingmysql查询的最佳实践。 我试图testing非常基本的数据库查询,如保存: User.prototype.save = function(cb) { var query = 'INSERT INTO user (name, email, password, img, description)' + 'values (?, ?, ?, ?, ?)'; var params = [this.name, this.email, this.pass, this.img, this.description]; db.query(query, params, function(err, rows) { if (err) return cb(err); cb(rows.insertId); } ); }; 我相信我想做一个模拟数据库,并使用该对象,而不是我的数据库对象,但我也想分开testing逻辑从应用程序逻辑。 我尝试了一些变化 describe('User', function() { before(function() { mock = sinon.mock(require('../middleware/db')); […]

嘲笑使用sinon肥皂网服务

我有一个使用Express应用程序的Node应用程序,并且想要调用soap web服务,以便我可以编写一些unit testing。 对于嘲笑,我使用Sinon和Soap向SOAP Web服务发送请求,但在如何解决这个问题上遇到困难。 before(function(done) { var soapWs = require('../../methods/soapWs'); soapWs.user = soap.createClient(path + '/restsoapproxy/test/specs/testjson/user.wsdl); // following returns undefined sinon.stub(SoapWs.user, 'sessionLogin', function(err) { err.code = '404'; err.message = 'error'; // eg "for user not found" return err; }); } SOAP Web服务有一个名为sessionLogin的方法,它接受用户名和电子邮件,但不知道如何使用sinon来模拟对soap web服务的调用 – 上面的代码片段返回“undefined”

如何在unit testing中用sinon / proxyquire或node.js中的依赖关系模拟twilio

说我想testing一个用户login控制器,通过短信与Twilio发送login代码。 我应该如何设置testing,以便我可以嘲笑Twilio,看看它发回的代码。 我的方法就是恳求客户对象,并用sinon窥探它,但我认为我没有把它做得很正确。 控制器user.js var smsClient = new twilio.RestClient(config.get('twilio_account_sid'), config.get('twilio_auth_token')); module.exports = { checkCode: function(phone){ var code = getNewCode(); smsClient.sms.messages.create({ from: config.get('twilio_phone_number'), to: phone, body: 'Your code :' + code }, callback); } } testing文件 var twilioMock = //what goes here?? var smsSpy = sinon.spy(twilioMock.sms.messages, 'create'); var User = proxyquire('../models/user', { 'mongoose': mongooseMock, 'smsClient': twilioMock […]

unit testing快速路由调用控制器方法?

我看到一些类似的问题 ,但我的设置稍有不同,我无法找出一个好方法来testing这个。 我试图testing,我的快速应用程序路线是针对正确的控制器方法。 例如 – //server.js, base application var express = require("express"); var app = express(); require("./routes.js")(app); … //routes.js var menuController = require("./controllers/menu.js"); module.exports = function(expressApp) { expressApp.get('/menu', menuController.getMenu); }; … //test file var express = require('express') , menuController = require("../../controllers/menu.js") , chai = require('chai') , should = chai.should() , sinon = require('sinon') , sinonChai […]

在asynchronous系列中存储api请求

我有一个模块,调整图像, imageResizer ,使用graphicsmagick和另一个模块, apiCaller ,它有两个函数,一个用于get请求,另一个用于post请求,使用request模块。 在imageResizer我调用apiCaller.get ,一个触发图像resize的函数,然后调用,如果get请求成功,然后如果这样就可以了apiCaller.post被调用。 这是这样的事情: exports.imageResizer = function (arguments) { async.series([ function(callback) { apiCaller.get(callback); }, function(callback) { gm("filepath") .resize("sizes") .write("destinationPath", function (err) { if(err) // do something }, callback()); }, function(callback) { apiCallerPost(arguments) } ]); } apiCaller = {}; apiCaller.get = function (arguments, callback) { // setup variables and stuff function _callback […]

如何在NodeJS环境中使用sinon.useFakeXMLHttpRequest&sinon.fakeServer.create

在我的项目中,需要在NodeJS环境中执行testing脚本。 在testing脚本中,我想使用sinon的useFakeXMLHttpRequest&fakeServer。 是否有可能在NodeJS环境中使用它。 任何帮助表示赞赏..