Tag: 嘲笑

如何在Node.js中模拟依赖testing?

我想为我的应用程序编写一些unit testing,我可以以某种方式“模拟”require('dependencyname')所使用的一些依赖项吗?

间谍Date.now()导致茉莉花节点没有响应

我正在使用茉莉节点做unit testing。 我做了下面的代码嘲笑Date.now() spyOn(Date, 'now').andReturn(1387636363717); //always return a fixed time 然后我试图运行jasmine-node spec/但它停止工作,没有输出。 我无法弄清楚是什么原因。

使用mockgoose为mongoose(mongodb库为node.js)嘲笑填充方法是null

无法debugging模拟了填充字段设置属性的问题。 Yads mockgoose http://github.com/yads/Mockgoose fork解决了填充选项工作的错误,但是如果你指定了字段,它会为填充的属性返回一个空值。 我试着通过源代码查看,并通过debugging器,但不知道在哪里看。 我可以在debugging器中看到填充选项会触发一个调用来获取子元素 – 而且我看到调用返回正确的子字段的结果,但是当父元素最终返回时,它具有该子元素的属性元素设置为null。 查询: Posts.findById(foo).populate('createdBy', {fname:1, lname:1}); 用post.createdBy = null错误地返回一个post。 省略fame,lname的字段参数,以某种方式使它再次与post.createdBy返回完整的对象。 以下是代码的一些摘录 – 尽pipe我不确定那些是正确的地方看。 collections.js this.find = function (conditions, options, callback) { var results; var models = db[name]; if (!_.isEmpty(conditions)) { results = utils.findModelQuery(models, conditions); } else { results = utils.objectToArray(utils.cloneItems(models)); } results = filter.applyOptions(options, results); if (results.name === […]

不同的参数/返回值为sinon期望

我正在为我的模块编写unit testing,并使用SinonJS来validation对其他模块的函数调用的期望。 首先,我为其他模块注册一个模拟: var otherModule = { getConfig : function () {} }; mockery.registerMock("otherModule", otherModule); 之后,我运行一些testing,并(成功)validation一些期望,如: var otherModuleMock = sinon.mock(otherModule); otherModuleMock .expects("getConfig") .once() .withArgs("A") .returns(configValuesForA); // run test otherModuleMock.verify(); // <- succeeds 我碰到一个问题,但是,当模块调用getConfig函数两次,不同的参数: otherModuleMock .expects("getConfig") .once() .withArgs("A") .returns(configValuesForA); otherModuleMock .expects("getConfig") .once() .withArgs("B") .returns(configValuesForB); 从我对文档的理解,这应该可能工作。 但是,这会导致以下错误: ExpectationError: Unexpected call: getConfig(A) Expectation met: getConfig(A[, …]) once Expectation […]

嘲笑仓库,然后换掉在Node.js中真正的实现

我正在为上面的抽象构build一个具有更高级别API的Repository层,以调用数据库持久性。 但是由于JavaScript没有像C#或Java这样的语言接口的概念,你如何replace真正实现的模拟? 我更喜欢创build自定义模拟,节点存储库模块与数据persitence高层次的方法在他们与Sinon.js或类似的东西。 如果我正在创build节点模块,那么如何? 我可以发送存储库的模拟表示,在那里我嘲笑存储库方法正在做什么,但是使用这些存储库模块的实际节点模块需要使用调用真实数据库的真实存储库实现。 这是如何在Node中完成的? 我想通过属性注入,我不想要一些巨大的注入IoC框架。 既然没有接口的概念,那么你在Node / JS中使用wtf吗? 我不得不在存储库下面创build一个数据层(不pipe是对Postgres进行实际查询调用的一组自定义模块,还是使用Mongoose或其他任何方法,我需要一个存储库调用的DL模块这是真正的数据库调用引擎盖下)。 而且可以说,我确实select使用像Sinon.js这样的框架,嘲笑框架和真实模块可以共享的模块的通用界面是什么?

testing与Mockgoose失败导致MongoError:拓扑被破坏

我正在用Mockgoose / Mongoose(使用Mocha / Chai作为testing套件)进行一系列的testing。 如果我的某个testing发生故障(例如,由于.should.be.deep.equal()失败),所有后续testing都会失败,并显示消息MongoError: topology was destroyed 这里有一些相关的片段: mockgoose(mongoose); before(function(done) { mongoose.connect('mongodb://fake.test/TestingDB', function(err) { done(err); }); }); afterEach(function(done) { mockgoose.reset(); done(); }); // Test Cases describe('Testing the functions that deal with users and locations:', function() { // Test Setup var req beforeEach(function(done) { req = {}; mockgoose.reset(); done(); }); beforeEach(function(done) { sensors.create(testData.deviceData, function(err, […]

节点Mock-fs – / path / to / file不被模拟

在Mochaunit testing我的吞噬应用程序,并使用mock-fs回购模拟fs 。 在我的应用程序代码中,我有: console.log('sssssssssssssss ' + srcFile); srcFile = fs.statSync(srcFile).mtime; 其中显示了sssssssssssssss /home/one/foo 在我的testing中,我有: mock({ home: { one: { foo: mock.file({ content: 'nothing', mtime: new Date(Date.now()) }) }, }, bar: mock.file({ content: 'nothing', mtime: new Date(1,1) }) }); 但是当我运行testing时Error: ENOENT, no such file or directory '/home/one/foo'出现Error: ENOENT, no such file or directory '/home/one/foo' 。 我在做什么错在/home/one/foo没有被模拟?

如何使用jasmine-node在Node.js中模拟seneca调用?

我使用express模块​​,下面是app.js的代码 app.post('/test_url', function(request, response){ seneca.client({type: 'http',port: '3000',host: 'localhost',protocol: 'http'}).act({role: 'sample_role', cmd: 'save',firstname: request.params.firstname}, function (err, result) { console.log("Inside Seneca act"); response.json(result); }) }); 以下是我正在编写上述代码的testing用例的testing文件。 describe("POST /test_url/:firstname", function() { it("should return status code 200", function(done) { <b>//here I want to mock the call for seneca.client so that I can test if the call has been made […]

使用proxyquire进行模拟的策略需要跨越多个testing文件(NodeJS)

我在几个API文件中使用Rediscaching,这意味着我有一个依赖,我需要在testing中模拟。 假设我有以下文件结构 -api – login.js * – login.spec.js – initiate.js – initiate.spec.js – user.js * – user.spec.js – routes.js – server.js 假设那些带有*的文件具有redis-connection作为依赖,我可以使用Proxyquire在相应的spec.js进行模拟。 简单。 当我运行所有testing时,问题就出现了,Mocha启动服务器。 所有这些文件将被引入我的routes.js ,并且因为Redis没有运行而失败。 我可以看到几个方法: 全球模拟proxyquire – 文档不喜欢这个。 我目前的解决方法,在每个需要redis-connection文件中,有条件地导入真实的东西或基本的模拟,如果process.env.NODE_ENV === 'test' 。 然后,如果您需要特定的行为,请将这个模拟器在相关的spec文件中更有用的模拟。 卷土重来,但似乎工作。 在每个spec文件中为每个redis-connection发生一个模拟。 听起来很糟糕的pipe理。 当Mocha最初运行服务器时也可能不起作用 有没有其他方法呢? 我觉得我的解决方法可能暂时工作,因为我不经常使用这种依赖关系,但我更喜欢一个更具可扩展性的解决scheme。 谢谢

用nock模拟一个开放的networking套接字

我正在尝试使用nock对Oanda交易API编写的代码进行反向testing。 为此,我需要模拟stream媒体价格API(请参阅http://developer.oanda.com/rest-practice/streaming/上的stream媒体stream量)。 但是,看起来nock只能让你回复一个单一的回复,即使回应是一个stream。 有没有办法将数以千计的价格事件stream作为个人对单个请求的回应? var scopeStream = nock('https://stream-fxpractice.oanda.com') .persist() .filteringPath(function(path) { return '/stream'; }) .get('/stream') .reply(function(uri, requestBody) { return [200, {"tick":{"instrument":"AUD_CAD","time":"2014-01-30T20:47:08.066398Z","bid":0.98114,"ask":0.98139}}] })