如何在Angular中测试捕获HTTP错误

时间:2019-03-15 13:05:11

标签: angular jasmine

我在Angular中具有以下功能:

public class AlarmNotificationReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {

    String NOTIFICATION_CHANNEL_ID = "my_channel_id_01";

    NotificationCompat.Builder builder = new NotificationCompat.Builder(context, NOTIFICATION_CHANNEL_ID);

    builder.setAutoCancel(true)
            .setDefaults(Notification.DEFAULT_ALL)
            .setWhen(System.currentTimeMillis())
            .setSmallIcon(R.mipmap.ic_launcher_round)
            .setContentTitle("It's Yoga Time!")
            .setContentText("Time to train again.")
            .setContentInfo("Info");

    NotificationManager notificationManager = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE);
    notificationManager.notify(1,builder.build()); } }

如何编写一个使用Jasmine进入catch块的测试用例?

1 个答案:

答案 0 :(得分:0)

您需要使用Jasmine的间谍。看起来像这样:

describe('when there is an error', () => {
  beforeEach(() => {
    const error = new Error()
    spyOn(http, 'post').and.returnValue(of(error));
    spyOn(service, 'handleError').and.callThrough();

    service.getData({});
  });

  it('should handle the error', () => {
    expect(service.handleError).toHaveBeenCalled();
  });
})

Jasmine的间谍使我们能够模拟返回值(例如来自HTTP请求的错误),并测试代码中的替代路径。这就是returnValue正在做的事情。

callThrough仅告诉Jasmine监视该函数的实际实现的调用。对于handleError,我们只是想确保它在出现错误时能够运行。

如果实际上是我们的间谍被召唤,toHaveBeenCalled的所有操作都将返回true。

还有toHaveBeenCalledWith,您可以在其中进行测试以确保使用特定的参数调用了代码。在这种情况下,也许您实际上想将错误对象传递给handleError