【发布时间】:2016-01-26 20:12:03
【问题描述】:
所以我的问题很容易解释
这是我的测试规范
import {
describe,
expect,
it,
inject,
beforeEachProviders
} from 'angular2/testing_internal';
import {RestClient} from './rest.service';
import 'rxjs/add/operator/toPromise';
import 'rxjs/add/operator/delay';
import {
HTTP_PROVIDERS
} from 'angular2/http';
export function main() {
describe('RestClient Service', () => {
beforeEachProviders( () => [HTTP_PROVIDERS, RestClient] );
it('is defined', inject( [RestClient], (client) =>{
client.get('http://jsonplaceholder.typicode.com/posts/1')
.delay(2000)
.toPromise()
.then((res) => {
console.log('test');
expect(res.length).toBeGreaterThan(1000);
});
}));
});
}
这是 "RestClient" 类中返回 Observable 的方法
public get(url:string): Observable<any> {
return this.http.get(url).map(res => res.json());
}
所以,我开始测试,测试返回
START:
LOG: 'ciao'
RestClient Service
✔ is defined
PhantomJS 2.0.0 (Mac OS X 0.0.0) LOG: 'ciao'
Finished in 0.026 secs / 0.038 secs
SUMMARY:
✔ 2 tests completed
对于 Karma 来说,一切正常,测试正确通过并且不正确,同时如果我将 console.log 放入“then”,则永远不会被调用。 我想这是异步调用的问题,你知道如何在 Angular2 异步调用中进行测试吗 我也使用过 Inject 和 AsyncInject。 我知道我可以使用 MockBackend,但我需要使用外部 url 进行测试
提前感谢您的帮助
【问题讨论】:
-
您想发布解决此问题的方法吗? @cingusoft
标签: http testing asynchronous angular karma-jasmine