测试服务:MockBackend方法和spyOn()。和.returnValue()方法之间的区别

时间:2017-04-12 09:23:04

标签: unit-testing angular http-mock

这两项测试似乎有效(至少在我的情况下)

这两种方法之间是否存在一些具体差异? 以及如何决定我应该使用的那个(使用Http测试服务的最佳实践)?

1。使用MockBackend方法

let backend: XHRBackend;
let defaultOptions: BaseRequestOptions;
let http = new Http(backend, defaultOptions);

it('#getResources should get an items list', async(() => {

  const spy = spyOn(http, 'get')
              .and.returnValue(
                Observable.of(new Response(new ResponseOptions({
                    body: {items: ['foo','bar']}
                }))
              ));

  let service = new MyService(http);
  service.getResources('/foobar').subscribe(items => {
    expect(items).toEqual(['foo','bar']);
  });

}));

2。使用spyOn()。和.returnValue()方法

protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    ImageView imageView = (ImageView) findViewById(R.id.my_image_view);
    GlideDrawableImageViewTarget imageViewTarget = new GlideDrawableImageViewTarget(imageView);
    Glide.with(this).load(R.drawable.dancingbanana).into(imageViewTarget);
}

1 个答案:

答案 0 :(得分:2)

使用MockBackend因为您可能还应测试其他内容,例如网址正确,添加了正确的标头等等。所有这些都可以从{{3}获取来自MockConnection

TestBed.get(MockBackend).connections
 .subscribe((connection: MockConnection) => {
   const request = connection.request;
   expect(request.url).toBe(...)
 })
);

这些是您应该测试的内容,因为拥有意外的网址会导致请求在应用中失败。所以你应该测试它。以及标题,以及与请求相关的任何其他内容。