Nubescope / sinon-mongoose

Extend Sinon stubs for Mongoose methods to test chained methods easily
MIT License
87 stars 29 forks source link

Feature Request - Handle MongooseModel.method().cursor() streams #25

Open paynoattn opened 7 years ago

paynoattn commented 7 years ago

The .cursor() method on mongoose model methods returns a readable stream, not a promise. Given how stream-oriented node js, and how you can easilly .pipe your mongoose queries to your server response like so:

const Model = mongoose.model('model', mySchema);

// ...
Model.find().limit(10).cursor().pipe(res);

It would be nice to have a stub method that returned a readable stream like so

MyMock = sinon.stub(Model)
MyMock.expects('find')
      .chain('limit').withArgs(10)
      .chain('cursor')
      .streams([1,2,3])

For now, the only way I can do this is to create a custom readable stream that the mock returns like so.

const Readable = require('stream').readable,
      rs = new Readable({objectMode: true}),
      array = [1,2,3];
array.forEach(x => rs.push(x));
rs.push(null);

MyMock.expects('find')
      .chain('limit').withArgs(10)
      .chain('cursor')
      .returns(rs);
gaguirre commented 7 years ago

Hi @paynoattn, will take a look this week. A PR for this would be great! 😃

natanavra commented 5 years ago

Any news on this one?

myatsuphyo commented 4 years ago

Any news on this one?