Синон: не могу издеваться над обещанием - PullRequest
0 голосов
/ 14 февраля 2019

Я знаю, что этот вопрос довольно часто, и я прочитал все связанные с ним вопросы, но, похоже, я все еще не могу понять, как применить их к моему делу.

Это моя ошибка:

 Error: Timeout of 2000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.

Я пытаюсь заглушить метод со следующей подписью:

 public async signIn(model: SignInInputModel): Promise<SignInResultModel> {...}

И я не хочу заглушать модель ответа перед началом модульного теста.Вот как я пытаюсь сделать это безуспешно:

describe("incorrect behaviour", () => {
        before((done) => {
            sinon.stub(Auth0Service.prototype, "signIn").resolves(() => {
                const result = new SignInResultModel();
                result.success = false;
                result.errorMessage = "foo";
                return result;
            });

            //this not working as well
            //  sinon.stub(Auth0Service.prototype, "signIn").returns(() => {
            //     const result = new SignInResultModel();
            //     result.success = false;
            //     result.errorMessage = "foo";
            //     Promise.resolve(result);
            // });

        });
        it("sinon test", async (done) => {
            request(app)
                .post("/auth/signIn")
                .send()
                .expect(200)
                .end((err, res) => {
                    ...
                    done();
                });
        });
    });

Что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 14 февраля 2019

resolves() должно вернуть значение, вы возвращаете функцию, которая кажется неправильной.

let result = new SignInResultModel();
result.success = false;
result.errorMessage = "foo";
sinon.stub(Auth0Service.prototype, "signIn").resolves(result);
0 голосов
/ 14 февраля 2019

Ну, я просто пропустил вызов функции done в конце.

Правильный ответ:

sinon.stub(Auth0Service.prototype, "signIn").resolves({
    success: false,
     accessToken: "test",
     errorMessage: "aaa",
     statusCode: 404,
} as SignInResultModel);
 done();
...