2017-01-26 3 views
3

Я пытаюсь настроить сервер с помощью Node/Express и хочу иметь возможность писать ES6, поэтому я использую babel.Почему мой экспресс-тест не проходит?

Прямо сейчас, сервер работает, и я могу выполнить запросы, которые мне нужны, но я пытаюсь настроить для него тест, если я хочу внести какие-либо изменения. Тест не срабатывает по той причине, которую я еще не могу установить.

Вот мой код,

App.js:

import express from 'express'; 
import bodyParser from 'body-parser'; 
import morgan from 'morgan'; 
import router from './routes/router'; 

// App Setup 
const app = express(); 
app.use(morgan('combined')); 
app.use(bodyParser.json({ type: '*/*' })); 
router(app); 

export default app; 

index.js:

import app from './app'; 

// Server Setup 
const port = process.env.PORT || 3090; 
app.listen(port,() => { 
    console.log(`Server listening on: ${port}`); 
}); 

Router.js:

const router = (app) => { 
    app.get('/', (req, res) => { 
    res.writeHead(200, { 'Content-Type': 'text/plain' }); 
    res.end('Hello World\n'); 
    }); 
}; 

export default router; 

В test.js :

import assert from 'assert'; 
import request from 'supertest'; 
import app from '../app'; 

describe('The express App',() => { 
    it('should return 200', done => { 
    request(app) 
     .get('/') 
     .end((res) => { 
     assert.equal(200, res.statusCode); 
     done(); 
    }); 
    }); 
}); 

Вот НПМ сценарий:

"test": "mocha --compilers js:babel-register", 

И результат я получаю это: enter image description here

Можете ли вы сказать мне, что я делаю неправильно здесь? Благодаря!

ответ

2

Поскольку первый аргумент end callback является err, что в вашем случае является undefined и результаты в

assert.equal(200, undefined.statusCode) 

The правый путь

.end((err, res) => { 
    if (err) return done(err); 
    assert.equal(200, res.statusCode); 
    done(); 
}) 

E лучше было бы использовать непосредственно .expect(200), как ответил @R. Gulbrandsen.

+0

Хотя, для более продвинутых утверждений мне нравится ваш код –

+0

справа, у вас тоже есть верхняя часть ;-) – lustoykov

2

Попробуйте изменить тест использовать Supertest рассчитывают так:

import assert from 'assert'; 
import request from 'supertest'; 
import app from '../app'; 

describe('The express App',() => { 
    it('should return 200', done => { 
    request(app) 
     .get('/') 
     .expect(200) 
     .end(done); 
    }); 
}); 
Смежные вопросы