2016-12-31 16 views
0

Как я могу следить за функцией, которая вызывается из ссылки на нее внутри объекта? Я использую Jasmine 2.5.2 в качестве рамки тестирования и babel-plugin-rewire для переустановки зависимостей.Jasmine и babel rewire spy по ссылочному методу

Посмотрите:

a.js

const map = { 
a, 
b, 
c 
}; 
function run(options) { 
map[options.val](); 
} 
function a() {...} 
function b() {...} 
function c() {...} 

a.spec.js

import { a, __RewireAPI__ as ARewireAPI } from './a'; 

describe('a',() => { 
    describe('run',() => { 
    const spy= jasmine.createSpy('spy').and.callFake(() => { 
     ... 
    }); 
    beforeEach(() => { 
     ARewireAPI.__Rewire__('b', spy); 
    }); 
    afterEach(() => { 
     ARewireAPI.__ResetDependency__('b'); 
    }); 
    it('calls b()',() => { 
     a.run({val: 'b'}); // doesn't call the spy because what actually being called is the reference from the map object 
    }); 
    }); 
}); 

ответ

0

Ok нашел решение. Вместо того, чтобы переустанавливать функцию, переустановите карту следующим образом:

beforeEach(() => { 
     ARewireAPI.__Rewire__('map', {b: spy}); 
    }); 
    afterEach(() => { 
     ARewireAPI.__ResetDependency__('map'); 
    });