カッコの周りの空白について
function foo() { ... }
ていうコードを書いたらlintに怒られた。space-before-function-paren
だそうで、
function foo () { .. }
なら許してくださるらしい。
ギュってなってて読みづらいとかいう理由から生まれたんじゃないかと思うのだけど、エディタのフォント変えたほうがいいんじゃないですかという気分…。
同じように、{}
や()
の内側にスペース入れる文化も、否定はしないけど、ちょっとなぁ。
こういう俺にとって見やすい見づらいみたいな水掛けになるルール、控えめに言って滅んでほしい。もうGitHubとかがまとめてlintしてください。
AngularのHttpを使うサービスの単体テスト
4系の話。Http
を使ってAPIアクセスするようなサービス(ここではPostService
)のテスト。もう一度同じものを書けと言われても無理だなと思ったので書いておく。
import { TestBed, inject, async } from '@angular/core/testing'; import { MockBackend, MockConnection } from '@angular/http/testing'; import { Http, Response, RequestMethod, ConnectionBackend, RequestOptions, BaseRequestOptions, ResponseOptions } from '@angular/http'; import { PostService, Post } from './post.service'; describe('PostService', () => { beforeEach(() => { TestBed.configureTestingModule({ providers: [ {provide: ConnectionBackend, useClass: MockBackend}, {provide: RequestOptions, useClass: BaseRequestOptions}, Http, PostService ] }); }); describe('fetchAll', () => { beforeEach(inject([ConnectionBackend], (mockBackend: MockBackend) => { mockBackend.connections.subscribe((connection: MockConnection) => { expect(connection.request.method).toEqual(RequestMethod.Get); connection.mockRespond(new Response(new ResponseOptions({ status: 200, body: { posts: [{content: "Hello"}, {content: "Goodbye"}] } }))); }); })); it('should return list of posts', async(inject([PostService], (service: PostService) => { service.fetchAll().subscribe((posts: Post[]) => { expect(posts[0].body).toEqual("Hello"); expect(posts[1].body).toEqual("Goodbye"); }); }))); }); });
テストコード中で投げたリクエストが、ConnectionBackend
のuseClass
に設定したMockBackend
のconnections
に流れてくるので、それに対する応答をbeforeEach
で設定している。リアクティブ。
あとはsubscribe
の中でexpect
することになるので、it
の第2引数をasync
で包むとこが忘れがちポイント。
Testing Angular 2 Services and Http with Jasmine などを参考にしました。
ReDocに食わせるOpenAPIにはoperationIdを書こう
最近ReDocを触っていてヤヤハマリに遭遇することがあるので書いておきます。
operationId
ってなにさというと、OpenAPIのOperation Objectの一項目で、操作を識別するための一意な文字列のことです。ReDocに食わせるOpenAPIには、と書きましたが、そうでなくても書いておくべきやつです。
困ったこと
v1.14.0の話です。
ReDocのデモを見るとわかりますが、例えばaddPet
というoperationIdが付いた操作には、パーマリンクとして
http://rebilly.github.io/ReDoc/#operation/addPet が与えられます。operationIdをちゃんと書いたときはいいのですが、ここをサボると、ReDocは他の情報から頑張って一意な文字列を作ろうとします。健気なやつです。ただその文字列が、
/#null%2Fpaths%2F~1v1~1pet.json%2Fget
みたいな。せっかく頑張ってくれたんですが、ちょっと積極的に使う気になれない。しかも場所によって先頭のnull
がundefined
になってリンクとして機能しないっていう…。ということで、operationIdはサボらずちゃんと書きましょう。