![](/img/trans.png)
[英]How to return different values from a mock service for two different tests?
[英]How to return different mock based on different params?
我有一個帶有param的api調用:
public getPersonName(id: number): Observable<Person> {
let searchParams: URLSearchParams = new URLSearchParams();
searchParams.append("id", id.toString());
// my http call is down here ...
}
我的模擬看起來像這樣:
public handleRequest(connection: MockConnection): void {
let request: Request = connection.request;
// Used in Expedite
if (request.method === RequestMethod.Get && new RegExp('\/person').test(request.url)) {
setTimeout(() => {
connection.mockRespond(new Response(
new ResponseOptions({
status: 200,
headers: new Headers(MY_HEADERS),
body: {
"fname": "John",
"lname": "Deer",
"age": 25
}
})
));
}, 1000);
}
}
但是我想要的實際上是根據id返回一個不同的json ...因此,如果id為5325,我想返回一個json結果,如果id為4545,我想返回一個不同的json ...
我該怎么做呢?
謝謝@!
我假設您的handleRequest
函數正在傳遞給mockBackend.connections.subscribe()
。
在這種情況下,您可以使用RxJS的功能來幫助您。
您可以過濾發出的連接並以不同的方式答復它們。
另外,您甚至不需要使用setTimeout
,因為RxJS還為您提供了一個延遲運算符。
mockBackend.connections
.filter(({ request }) => request.method === RequestMethod.Get && request.url === '/person/123')
.delay(1000)
.subscribe(conn => {
// Respond for person 123
conn.mockRespond({});
});
mockBackend.connections
.filter(({ request }) => request.method === RequestMethod.Get && request.url === '/person/456')
.delay(1000)
.subscribe(conn => {
// Respond for person 456
conn.mockRespond({});
});
找到了當前結構的簡單解決方案:
if (request.method === RequestMethod.Get && new RegExp('\/person').test(request.url) && req.url.endsWith('123'))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.