Как я могу использовать async/await ES2016 (ES7) в моих приемочных тестах для приложения Koa.js?

Я нахожусь в процессе написания своего первого приложения Koa.js, и, недавно познакомившись с функциями ES2016 (он же ES7) async/await, я хотел их использовать.

Я обнаружил, что мои навыки работы с Google не соответствуют этой задаче, и несколько фрагментов кода, которые я смог найти, были либо для стандартного Koa (с использованием генераторов), либо для чего-то еще не столь передового, как ES7.

Смотрите мой ответ ниже о том, как я запустил свои тесты.


person egeland    schedule 27.10.2015    source источник


Ответы (1)


Я все еще новичок, поэтому, вероятно, многое из этого можно значительно оптимизировать, но вот что сработало для меня.

Я в основном просто выгружаю сюда свои файлы, они должны быть довольно простыми.


My app.js:

import koa from 'koa';
import router from 'koa-router';
let koarouter = router();

// Intialize the base application
export const app = koa();

koarouter.get('/', async function() {
    this.body = 'Hello World!';
});

// Initialize koa-router
app.use(koarouter.routes());

if (!module.parent) {
    app.listen(3000);
    console.log('Listening on http://localhost:3000');
}

myapp-spec.js - сюда идут тесты:

import {app} from '../app';
import * as sap from 'supertest-as-promised';
const request = sap.agent(app.listen());

import chai from 'chai';
const should = chai.should();

describe('/', () => {
    it('should return 200 OK', async function() {
        const response = await request.get('/');
        response.status.should.equal(200);
    });
    it('should say "Hello World!"', async function() {
        const response = await request.get('/');
        response.text.should.equal('Hello World!');
    });
});

mocha-babel.js, для переноса тестов:

'use strict';

require('babel/register')({
  'optional': [ 'es7.asyncFunctions' ]
});

Моя index.js точка входа, для транспиляции Babel для самого приложения:

'use strict';

require('babel/register'); // Imports babel - auto transpiles the other stuff
require('./app'); // this is es6 - gets transpiled

И, наконец, раздел скриптов в моем package.json:

"scripts": {
    "pretest": "npm run lint -s",
    "test:unit": "echo '= test:unit ='; mocha --require mocha-babel",
    "test:feature": "echo ' = test:feature ='; mocha --require mocha-babel feature",
    "test": "npm run test:unit -s && npm run test:feature -s",
    "start": "node index.js",
    "lint": "echo '= lint ='; eslint ."
  },

Обратите внимание, что я поместил свои файлы *_spec.js в каталог ./feature/, а свои модульные тесты (не показанные в этом посте) в ./test/, где mocha находит их автоматически.


Я надеюсь, что это поможет людям, которые, как и я, пытаются использовать Koa с новыми и удивительными функциями async/await ECMAScript2016/ES7.

person egeland    schedule 27.10.2015