2016-07-05 19 views
1

私は、自動化されたAPIドキュメント生成を行うSpringのJavaフレームワークを使用してプロジェクトを作成しました。 BDD /統合スタイルテストを実行するたびに、mochaテストから作成されたapiの青いプリントファイルがありました。その後、generate-html-from-apiの青写真を実行しました。mocha BDDテストからAPI htmlドキュメントを生成する方法は?

1) API docs are always correct and up-to-date 
2) saves time, because no need to write another documentation file (like apidoc). 

は、誰もが試みたとノードプロジェクトの例を働いた:それは2つの利点があるように私はこのアプローチを気に入っ?私はapi-doc-testプラグインを見つけましたが、そのドキュメントは限られています。 ?理想的には、私は実行したいと思います:

テストの/ tmp /の下にAPI-doc.htmlと場所を生成する
mocha --recursive 

ぼんやりとしたものを見ましたが、実際にエンドポイント情報を2回指定したくないので、BDDテストで1回書いてみて、同時に2つの結果(テスト+ドキュメント)を作成するのは本当に素晴らしいと思います。

+0

FWIW。代わりに、私たちはそれがAPIがどんなものであるべきかのテスト可能な契約になるように構築しました。そのため、https://github.com/apiaryio/dreddを作成して、その契約(API Blueprint)に対して実装をテストすることができます。 /私はAPI Blueprintの著者/ – Zdenek

+0

@ Zdenekありがとう、それは私の写真を変える!小規模スタートアップの場合は、1種類のテストのみを書く価値があります。それ以外の場合は高価です。したがって、mochaを使用する代わりに、API blueprint + Dreddを使用してBDD /統合テスト全体を記述できますか? – Centurion

+0

それがあなたのシナリオに十分であれば、そうすることができます(外部から判断するのは難しいです) – Zdenek

答えて

0

https://github.com/stackia/test2doc.js

私はあなたが必要なだけのまさに、BDD試験からドキュメント(現在はAPIの設計図)を生成可能にする、このプロジェクトに取り組んでいます。

テストコードの例:私たちは、から生成されるAPIの青写真を作成していない

const doc = require('test2doc') 
const request = require('supertest') // We use supertest as the HTTP request library 
require('should') // and use should as the assertion library 

// For Koa, you should exports app.listen() or app.callback() in your app entry 
const app = require('./my-express-app.js') 

after(function() { 
    doc.emit('api-documentation.apib') 
}) 

doc.group('Products').is(doc => { 
    describe('#Products', function() { 
    doc.action('Get all products').is(doc => { 
     it('should get all products', function() { 
     // Write specs towards your API endpoint as you would normally do 
     // Just decorate with some utility methods 
     return request(app) 
      .get(doc.get('/products')) 
      .query(doc.query({ 
      minPrice: doc.val(10, 'Only products of which price >= this value should be returned') 
      })) 
      .expect(200) 
      .then(res => { 
      body = doc.resBody(res.body) 
      body.desc('List of all products') 
       .should.not.be.empty() 
      body[0].should.have.properties('id', 'name', 'price') 
      body[0].price.desc('Price of this product').should.be.a.Number 
      }) 
     }) 
    }) 
    }) 
}) 
関連する問題