Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do you mock MySQL (without an ORM) in Node.js?

I'm using Node.js with felixge's node-mysql client. I am not using an ORM.

I'm testing with Vows and want to be able to mock my database, possibly using Sinon. Since I don't really have a DAL per se (aside from node-mysql), I'm not really sure how to go about this. My models are mostly simple CRUD with a lot of getters.

Any ideas on how to accomplish this?

like image 717
Josh Smith Avatar asked Dec 05 '11 17:12

Josh Smith


People also ask

Should you use ORM in node JS?

Different database systems access data in myriad ways, and ORM helps you maintain objects even when the sources and apps they access change over time. ORM is commonly used to streamline the migration of data between databases. Before we get to the reasons why you shouldn't use ORM with Node.

Can we connect MySQL with node js?

Once you have MySQL up and running on your computer, you can access it by using Node. js. To access a MySQL database with Node. js, you need a MySQL driver.


1 Answers

With sinon, you can put a mock or stub around an entire module. For example, suppose the mysql module has a function query:

var mock;  mock = sinon.mock(require('mysql')) mock.expects('query').with(queryString, queryParams).yields(null, rows); 

queryString, queryParams are the input you expect. rows is the output you expect.

When your class under test now require mysql and calls the query method, it will be intercepted and verified by sinon.

In your test expectation section you should have:

mock.verify() 

and in your teardown you should restore mysql back to normal functionality:

mock.restore() 
like image 169
kgilpin Avatar answered Sep 20 '22 16:09

kgilpin