Жасмин - шпионить за функцией, которая вызывается в том же файле

node.js unit-testing testing typescript jasmine

723 просмотра

1 ответ

350 Репутация автора

Это беспокоило меня некоторое время. У меня есть две функции в одном файле.

//fun.ts

export function fun1(){
    let msg = fun2();
    return msg;
}

export function fun2(): string{
    return "Some message";
}

У меня есть спецификация машинописи, которая заглушает fun2 и вызывает fun1.

//fun.spec.ts

import * as Fun from 'fun';

describe('Stubing', () => {
    it('should stub the return value', () => {
        spyOn(Fun, 'fun2').and.returnValue("A different message");

        expect(Fun.fun1()).toEqual("A different message")
    });
});

Но когда я запускаю спецификацию, я получаю вывод

Failures:
1) Stubing should stub the return value
1.1) Expected 'Some message' to equal 'A different message'.

Я написал тесты в машинописи, а затем у меня есть скрипт gulp, который успешно переносит и запускает спецификации жасмина. Все работает, единственное, что я не могу понять, это почему шпион не работает. Объяснение будет оценено.

Автор: carchase Источник Размещён: 18.07.2016 03:59

Ответы (1)


1 плюс

350 Репутация автора

Решение

Я наконец понял это. В fun.ts я напрямую вызываю объект fun2, но моя спецификация Jasmine не имеет доступа к этому объекту. Единственный объект, к которому может обратиться спецификация Jasmine, - это объект экспорта. Если я хочу, чтобы шпион работал, мне нужно вызвать fun2 для объекта экспорта.

//fun.ts
export function fun1(){
    let msg = exports.fun2();
    console.log(msg);
}

export function fun2(): string{
    return "Some message";
}

Теперь, когда спецификация выполняется, я вижу,

.
1 spec, 0 failures
Автор: carchase Размещён: 11.07.2017 12:44
Вопросы из категории :
32x32