模拟使用Typescript和Jest进行测试的类

史蒂文·斯科特

我正在尝试使用带有Angular和Typescript的Jest编写测试,但是我不太了解如何在类中模拟函数。我创建了一个非常简单的示例,试图在理解我不遵循的内容时获得一些帮助。

test-service.ts(简单类)

export class TestService{
    constructor() { }

    GetRandom(): number {
        return Math.floor(Math.random() * 100);
    }
}

这是简单的课程,只是为了展示我尝试模仿的内容。由于该函数返回一个随机数,因此您无法对其进行测试。这是我试图简单地说明可能返回任何内容的外部进程的示例,并希望检查返回的数据以确保我的代码可以正常工作。

测试服务规范

import { TestBed, ComponentFixture } from '@angular/core/testing';

import { NO_ERRORS_SCHEMA } from '@angular/core';

jest.mock('./test-service');
import { TestService } from './test-service';

describe('TestService', () => {
    let TestObject: TestService;

    beforeEach(() => {
        TestBed.configureTestingModule({
            imports: [ ],
            providers: [ ]
        });
    });

    describe('Sample Test', () => {
        test('Random Number should be mocked by Jest', () => {
            ...  // What do to here??
            expect(TestObject.GetRandom()).toBe(5);  // How do I get the mock here?

        });
    });
});

我不知道如何使随机数返回一个简单的数字(例如5)进行测试。

胜利者

首先,您必须创建一个方法来替换所需的模拟方法的实现。例如,我在类中创建了它TestUtil

export class TestUtil {

 public static mockService(service: any, methods: string[]) {
   @Injectable()
   class MockedClass {
   }

   methods.forEach(method => MockedClass.prototype[method] = Observable.of({}));

   return {provide: service, useClass: MockedClass};
  }
}

然后,您可以使用它TestService在测试模块中提供的模拟类。

describe('TestService', () => {
  let TestObject: TestService;

  beforeEach(() => {
    TestBed.configureTestingModule({
        providers: [TestUtil.mockService(TestService, ['GetRandom'])]
    });
  });

  beforeEach(inject([TestService], (injectedTestService: TestService) => {
    TestObject = injectedTestService;
  }));

  describe('Sample Test', () => {
    test('Random Number is mocked by You', () => {
       spyOn(TestObject, "GetRandom").and.returnValue(5);
       expect(TestObject.GetRandom()).toBe(5);
    });
  });
});

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用 jest 和 superagent 进行测试时如何模拟函数

使用Mocks使用Jest和Typescript进行测试

使用 nock 进行 Jest 和 HTTP 模拟

使用 Typescript 和 Jest 的简单获取模拟

使用 Jest/Supertest 进行 Express/Typescript 测试

使用Jest和Webpack别名进行测试

在 NodeJS 中使用 Jest 对类进行部分模拟

使用Jest进行React,TypeScript和RxJS测试不起作用

模拟点击时使用React的Jest和Enzyme进行测试会调用一个调用promise的函数

模拟案例类进行测试

模拟vs道具-使用Jest和Enzyme进行更改事件

如何使用 TypeScript 和 Jest 模拟深度嵌套的函数

使用正确的类型用Jest和Typescript模拟Express请求

在使用React Navigation和TypeScript时,如何使用Jest和Enzyme对静态navigationOptions进行单元测试?

使用 mockito 进行 Java 测试:模拟类对象

Typescript,在Redux操作中测试Api调用,在Enzyme,Jest中模拟类

使用 Jest 进行“import * as”模拟

在 Typescript Jest 中模拟导出的类

Typescript + Jest:如何部分模拟类实例

使用两个、三个依赖类模拟、存根进行 Junit 测试。对 Junit 教程和示例的任何推荐

使用TypeScript,Jest和Enzyme在React中进行单元测试:无法调用可能是“未定义”的对象

节点,使用sinon进行单元测试和模拟

对使用AngularFireAuth和模拟authState的服务进行单元测试

使用Espresso和模拟的DataSource进行测试失败

使用$ httpbackend模拟和打字稿进行单元测试

异步组件时使用React的Jest和酶进行测试

使用useEffect和jest.useFakeTimer()进行测试

无法触发使用Jest和酶进行测试的功能

如何使用 Jest 和 Typescript 测试“返回错误的函数”?