Reputation: 1
I am not using express,instead i m using koa js 1.0. Here is a sample app for inserting user. It includes mocha with supertest for test purpose.
In app.js ->
var koa = require('koa');
var app = koa();
var routes = require('koa-route');
//routes
var userRoutes = require("./userRoutes.js");
app.use(routes.post("/user",userRoutes.add);
app.use(routes.get("/user/:id",userRoutes.get);
module.exports = app;
app.listen(3000);
console.log('Listening to port 3000');
In userRoutes.js ->
var parse = require('co-body');
var monk = require('monk');
var wrap = require('co-monk');
var db = monk("localhost/usersApi");
var users = wrap(db.get("users"));
module.exports.users = users;
module.exports.add = function *(){
var postedUser = yield parse(this);
var insertedUser = yield db.users.insert(postedUser);
this.set("location","/user/" + insertedUser._id);
this.status = 200;
};
module.exports.get = function *(id){
this.body = "You passed me: " + id;
};
In test.js ->
var app = require('./app.js');
var request = require('supertest').agent(app.listen());
describe('Simple User Api:',function () {
var test_user = {name:'Marcus',City:'Bandung,Indonesia'};
it('creates a new user',function (done) {
//Post
request
.post('/user')
.send(test_user)
.expect('location',/^\/user\/[0-9a-fA-F]{24}$/)
.expect(200,done);
});
});
in package.json -
"scripts": {
"start": "node --harmony app.js",
"test": "mocha --harmony test.js -u bdd -R spec"
},
when i run "npm test" command it gives below error:
Listening to port 3000
Simple User Api:
TypeError: Cannot read property 'insert' of undefined
at Object.module.exports.add (D:\Nodejs\KoaCRUD\userRoutes.js:17:38)
at next (native)
at Object.<anonymous> (D:\Nodejs\KoaCRUD\node_modules\koa-
route\index.js:34:19)
at next (native)
at Object.<anonymous>
(D:\Nodejs\KoaCRUD\node_modules\koa\node_modules\koa-compos
e\index.js:28:19)
at next (native)
at onFulfilled (D:\Nodejs\KoaCRUD\node_modules\co\index.js:65:19)
at process._tickCallback (node.js:369:9)
1) creates a new user
0 passing (220ms)
1 failing
1) Simple User Api: creates a new user:
Error: expected "location" header field
at Test._assertHeader
(D:\Nodejs\KoaCRUD\node_modules\supertest\lib\test.js:219:45)
at Test._assertFunction
(D:\Nodejs\KoaCRUD\node_modules\supertest\lib\test.js:265
:11)
at Test.assert
(D:\Nodejs\KoaCRUD\node_modules\supertest\lib\test.js:153:18)
at assert (D:\Nodejs\KoaCRUD\node_modules\supertest\lib\test.js:131:12)
at D:\Nodejs\KoaCRUD\node_modules\supertest\lib\test.js:128:5
at Test.Request.callback
(D:\Nodejs\KoaCRUD\node_modules\supertest\node_modules\s
uperagent\lib\node\index.js:603:3)
at IncomingMessage.<anonymous>
(D:\Nodejs\KoaCRUD\node_modules\supertest\node_mod
ules\superagent\lib\node\index.js:767:18)
at endReadableNT (_stream_readable.js:921:12)
npm ERR! Test failed. See above for more details.
I searched on this a lot,but error not resolved. Anyone knows what is the issue? Thanks in advance.
Upvotes: 0
Views: 957
Reputation: 85
Looks like you just made one little error in userRoutes.js
The line:
var insertedUser = yield db.users.insert(postedUser);
should be:
var insertedUser = yield users.insert(postedUser);
db is your monk variable, and you already wrapped that with co-monk so you just need to use users.insert, not db.users.insert
Upvotes: 1