Как я могу протестировать метод зависимости - PullRequest
0 голосов
/ 17 января 2019

Это мой код, написанный на Typescript; Я хочу проверить приватный метод getFunc, и метод redisClient был вызван один раз. Я использую supertest для вызова API, но не могу ожидать, что метод redis.

import { Request, Response, Router } from "express";
import * as redis from "redis";
const redisOption: redis.ClientOpts = {
    host: "127.0.0.1",
    port: 6379,
    detect_buffers : true,
    db: 0,
   retry_strategy: () => 60000
}
const redisClient: redis.RedisClient = redis.createClient(redisOption);

export class IndexRoutes {
    public router: Router;
    constructor() {
        this.router = Router();
        this.init();
    }
    public init() {
        this.router.get("/",  this.getFunc);
    }
    private getFunc = async (req: Request, res: Response) => {
        return res.status(200).send(await redisClient.set("test", "123"));
    }
}

ошибка: неперехваченная ошибка Assertion: ожидаемый вызов ровно один раз, но он был вызван 0 раз

Помогите мне, как правильно отключить функцию redisClient.get (...)?

1 Ответ

0 голосов
/ 17 января 2019

Прежде всего, вы обычно не тестируете зависимости / методы зависимости. Вы только тестируете свой код.

Во-вторых, я думаю, вы говорите, что хотите проверить, вызывается redis.get() или нет. Это означает, что вам придется spy на это.

jest.spyOn() это то, что вы должны проверить.

Ваш тест должен выглядеть примерно так:

import * as redis from 'redis';

describe('my redis wrapper', () => {
  it('Should call get when my wrapper\'s getFunc is called', () => {
    let myRedisSpy = jest.spyOn(redis.prototype, 'get');
    // call your function here
    expect(myRedisSpy).toHaveBeenCalledOnce();
  });
});

Или что-то подобное, я не знаю, будет ли этот код работать как есть. Но вы всегда можете попробовать.

...