Ionic 调用函数时,在离子和Angular 中出现假http响应

igetnqfo  于 2023-01-15  发布在  Ionic
关注(0)|答案(2)|浏览(176)

我是jasmine karma测试的初学者。我正在尝试测试一个函数发出一个http请求。当我运行这个测试时,用我现在拥有的脚本,所有看到的都是加载程序,它永远不会离开屏幕。我想知道当函数被调用时,我如何能伪造一个响应,这样加载程序就可以被隐藏
函数

async login() {
const loader = await this.loadingCtrl.create({
  message: 'Testing',
});
loader.present();
    const payload = {
      username: 'username',
      password: 'test'
    };
    this.userService.login(payload).subscribe((response) => {
      loader.dismiss();
      if (response) {
    
        this.router.navigate(['/user-home']);
      }
    }, err => {
      loader.dismiss();
      this.alertS.show(err, 'OK');
    });
  }

测试用例

it('should login', () => {
    component.login();
    expect(component.login).toHaveBeenCalled();
  });
0x6upsns

0x6upsns1#

您需要模拟服务和组件可能具有的任何依赖项。您可以从jasmine使用createSpyObj,如下所示:

const mockService = jasmine.createSpyObj<UserService>('UserService', ['login']);

// provide a mocking/fake value to be returned by this dependency
beforeEach(() => mockService.login.and.returnValue(of('My value')));

beforeEach(async () => {
 await TestBed.configureTestingModule({
    declarations: [...],
    // configure the dependency within providers
    providers: [{ provide: UserService, useValue: mockService }]
  })
})

it('calls login', () => {
  component.login();

  expect(mockService.login).toHaveBeenCalled();
});
qkf9rpyu

qkf9rpyu2#

完全没有经过测试,但只是猜测,因为你的函数是异步的,尝试如下:

it('calls login', (done) => {
  await component.login();

  expect(mockService.login).toHaveBeenCalled();

  done();
});

相关问题