5

因此,在我的程序中,当用户登录时,如果所有凭据都正确,如果缺少任何详细信息或格式不正确,他们将进入下一页,并在屏幕上显示警报。

如果在按下按钮后显示警报,我如何在 React Native 中使用 Jest 进行测试,并确认警报的文本是否正确?

我的一些组件如下所示:

...
.catch(function(error) {
    // Handle Errors here.
    var errorCode = error.code;
    var errorMessage = error.message;
    alert(errorMessage)
  });

错误文本是由 Google 的 Firebase 生成的,但我知道它是什么。

4

2 回答 2

14

假设您正在使用 react-native 的 Alert 并自己调用它,您可以像这样监视它:

import { Alert } from 'react-native';

jest.spyOn(Alert, 'alert');

然后您可以检查它是否已被调用,以及使用了哪些参数:

expect(Alert.alert).toHaveBeenCalledWith(errorMessageText)

于 2020-04-09T16:01:47.417 回答
1

在您的规范文件中。

添加

export class FakeSubject {
    next(value: any) {}
    asObservable() {}
}

配置您的测试平台:

TestBed.configureTestingModule({
    providers: [{ provide: Subject, useClass: FakeSubject }],
}),

在每次测试之前添加一个服务获取器。

beforeEach(() => {
    service = TestBed.get(AlertService);
});

添加测试,您可以将此示例用于另一个测试。

it('success alert ', () => {
    const spy = spyOn(service, 'alert');
    const message = 'hi!';
    service.success(message);
    expect(spy).toHaveBeenCalledWith(new Alert(message, AlertType.Success));
});

和你的实用方法:

it('alert ', () => {
    subject = service['subject'];
    const spy = spyOn(subject, 'next');
    const alert = new Alert('hi', AlertType.Success);
    service.alert(alert);
    expect(spy).toHaveBeenCalledWith(alert);
});

it('clear ', () => {
    subject = service['subject'];
    const spy = spyOn(subject, 'next');

service.clear();
expect(spy).toHaveBeenCalledWith(null);
});
于 2021-03-30T03:40:35.433 回答