いわゆるモックオブジェクトは複雑である必要はありません。
TypeScriptの構造型システムを利用することで、目標をすばやく完全な型の安全性で達成できます。
私-service.ts
import {Http} from '@angular/http';
export default class MyService {
constructor(readonly http: Http) {}
getXyz() {
return this.http.get('/assets/data/xyz.json')
// I think you probably meant map here, not subscribe
.map(
// Note: I removed the explicit type annotation on `response`.
// Don't put type annotations on callback parameters. They hide bugs!
response => this.parseXYZ(response)
);
}
}
今テストいくつかの定義によって
私-service.spec.ts
import test from 'tape';
import {Observable} from 'rxjs/Observable';
import {Http} from '@angular/http';
import MyService from './my-service';
// TODO: extract into a test helper module for reuse
async function createMockHttp() {
// might need to configure your loader/bundler to handle json files (not hard)
const data = await import('/assets/data/xyz.json');
return {
get(_: string) {
return Observable.of({
json:() => JSON.parse(data)
});
}
} as Http;
}
test('`MyService.prototype.getXyz` something', async t => {
const http = await createMockHttp();
const myService = new MyService(http); // no injector, nothing fancy
myService.getXyz().subscribe({
next: xyzStuff => {
t.deepEqual(xyzStuff, 'expectedValue');
},
error: error => t.fail(error),
complete:() => t.end()
});
});
のために、それはモックですしかし、それはかなり基本的なスタブオブジェクトです。 JSONを静的ファイルとして取得し、必要なメソッドのみを実装します。模擬フレームワークを使用せず、Angularの厄介なテストライブラリも使用しません。コードを直接実行するだけです。
いいえ、ありません。 – jonrsharpe