Tag: sinon

嘲笑的对象看起来像mongoose的对象

我刚刚开始瓦/摩卡,sinon和mongoose。 我在mongoose有一个模式/模型: var PersonSchema = new Schema({ name: { type: String, required: true }, employer: { type: Schema.Types.ObjectId, ref: 'Employer' } }); mongoose.model('Person', PersonSchema); var EmployerSchema = new Schema({ name: { type: String, required: true } }); mongoose.model('Employer', EmployerSchema); 我有一个方法来帮助查询: var getPersonById = function(id, callback) { Person.findById(id, function(err, person) { if (err) return callback(err); // […]

使用SinonJS存根(与rewire)

我有一个function: var publish = function(a, b, c) { main = a + getWriterName(b,c); } getWriterName是另一个函数: var getWriterName = function(b,c) { return 'Hello World'; } 我想testing“发布”function,但我不想在testing“发布”时运行“getWriterName”函数。 我觉得我存根getWriterName函数,因为我不想每次运行我testing“发布”,但我该怎么做呢? 我做了这样的事情: var sandbox = sinon.sandbox.create(); sandbox.stub(getWriterName).returns('done'); 但是这给了我一个错误 TypeError:尝试将未定义的属性undefined作为函数进行封装 如果我在写道上,那么我的st What怎么了? 编辑:我使用rewire,所以会喜欢解决scheme使用rewire

TypeError:尝试将未定义的属性查询包装为函数

我试图做一个嘲笑数据库驱动程序的简单基本示例(稍后将用于testing): 'use strict'; import mysql from 'mysql'; import sinon from 'sinon'; let mock = sinon.mock(mysql); mock.expects('query').withExactArgs(`DROP DATABASE IF EXISTS myDatabase`).yields({ "fieldCount": 0, "affectedRows": 1, "insertId": 0, "serverStatus": 258, "warningCount": 0, "message": "", "protocol41": true, "changedRows": 0 }); mysql.query('DROP DATABASE IF EXISTS myDatabase'); 我得到的错误: TypeError: Attempted to wrap undefined property query as function

节点expressiones6中文正文中间件不工作

我正在写我的快递路由器的摩卡unit testing。 然而,我发现,尽pipe我试图存储中间件,但它仍然执行中间件代码。 这里是我的路由器和testing,有谁能弄清楚? 路由器: import { aMiddleware, bMiddleware, cMiddleware } from '../middleware.js'; router.post('/url', aMiddleware, bMiddleware, cMiddleware, function(req, res) { … } 中间件: AuthMiddleware.aMiddleware = async (req, res, next) => { console.log('in real middleware'); next(); } testing: var authMiddleware = require('../../middleware/auth.js'); describe('Test', async () => { before(function (done) { _STUB_MIDDLEWARE_A = sinon.stub(authMiddleware, 'aMiddleware'); _STUB_MIDDLEWARE_A.callsArg(2); } […]

我如何使用sinonjs从Node.js模块中导出函数?

我有一个myModule Node.js模块,其中包含: function b() { console.log('original b'); } function a() { b(); } exports.a = a exports.b = b; 下面的testing套件使用mocha + sinon.js: const myModule = require('./myModule.js'); const sinon = require('sinon'); const sinonChai = require('sinon-chai'); chai.use(sinonChai); describe('not working stub', () => { it('should call the stub', () => { let stub = sinon.stub(myModule, 'b', () => […]

nodejs – stub module.exports函数与sinon

我有一个expressjs应用程序与以下routes和middleware模块。 我正在尝试使用mocha , chai , http-chai和sinonjs来testing路线模块。 该API使用mysql和为了testing路由模块,我把它全部模块化,以便我可以将mysql模块存根。 但是,当我尝试存根middleware/index ,我有麻烦。 如果我试图正常要求index ,模块实际上并没有被扼杀。 如果我尝试使用require.cache[require.resolve('./../../lib/routes/middleware/index')]; ,它似乎stub东西,但indexStub.returns(indexObj)返回一个错误TypeError: indexStub.returns is not a function和TypeError: indexStub.restore is not a function 。 如何正确地存储index.js为了控制代码stream,并防止它试图连接到MySQL? routes.js 'use strict'; const express = require('express'); const router = express.Router(); const configs = require('./../config/configs'); const middleware = require('./middleware/index'); const bodyParser = require('body-parser'); const useBodyParserJson = bodyParser.json({ verify: function (req, […]

带有proxyquire和sinon的google-geocoder

我还是很学习node,js,sinon,proxyquire等 我有一个使用谷歌地理编码模块( https://github.com/bigmountainideas/google-geocoder )的模块,我正在努力编写一个testing来存根。 这一切都归结为我想你如何设置它。 在time.js中,我按照google-geocoder文档进行如下操作: var geocoder = require('google-geocoder'); … module.exports = function(args, callback) { var geo = geocoder({ key: some-thing }); geo.find('new york', function(err, response) { … }); } 我想要testing如下,但我得到的错误: TypeError: geo.find is not a function at run (cmdsUser/time.js:x:x) at Context.<anonymous> (tests/cmdsUser/time-test.js:x:x) 时间test.js: var time; var findStub; before(function () { findStub = sinon.stub() […]

如何在unit testing路由时将快速路由所调用的控制器进行存储

我正在尝试unit testing快速路由,如下所示: var app = express(); app.get('/',indexController.Index); 在我的unit testing中,我使用的代码如下: const indexController = {}; indexController.Index = sinon.stub(); const server = proxyquire('../server.js', { './controllers/indexController': indexController }); describe('GET /', () => { it('index controller should be called', (done) => { request(server) .get('/') .expect(200) .end((err, res) => { if (err) { return done(err); } sinon.assert.called(indexController.Index); return done(); }); }); […]

摩卡柴Sinontesting无法访问的承诺/asynchronous/事件发射器

我的设置使用了chai , sinon , chai-sinon , chai-as-promised , babel和es6语法。 我有以下(减less)的代码 // example.js 'use strict'; import EventEmitter from 'events'; class Dispatcher extends EventEmitter { send(x) { doSomethingAsync() // promise is NOT returned .then(() => { this.emit('sent'); }) .catch((err) => { this.emit('error', err); }); } } 注意:doSomethingAsync的承诺不会返回。 (永远不会) 这是我的(减less的)testing文件 let dispatcher; let onSent; let onError; beforeEach(() => […]

Stubbing Fetch Call – response.json不会调用

我试图用sinon和sinon-stub-promise一个获取呼叫。 我非常接近…但我不知道为什么它不会调用我创build的response.json()方法。 function toJSON(response) { console.log(response); return response.json(); } function init() { fetch(darkWeatherUrl) .then(toJSON) .then(computeHours) .then(sendAlerts) .catch((e) => { console.log('init error ' + e); }); } describe('lifx alert test', ()=> { it('should run fetch', ()=> { var fetch = sinon.stub().returnsPromise(); var body = { "hourly": { data: [ { time: 1493413200, icon: 'clear-day', precipIntensity: 0, […]