Yusuf Tezel
Yusuf Tezel

Reputation: 11

Jest testing function that calls eval

I have a Vue TS project created with vue-cli 3.0.

This is the function I will test:

public hopJavascript(url: string) {
    eval(url);
}

And this is my test function using Jest framework:

test('navigation using javascript', () => {
    const url = "someurl";
    hopJavascript(url);
    
    expect(eval).toBeCalled();
});

Now i get this message,test failed console logging which is telling me that I need a mocked version of eval.

How can i mock eval ?

Upvotes: 1

Views: 1612

Answers (2)

zilijonas
zilijonas

Reputation: 3745

You need to track your function with spyOn().

This solution should work for you.

import MyClass from '../MyClass';

test('navigation using javascript', () => {
    const url = "someurl";
    const spy = jest.spyOn(MyClass, 'eval');

    MyClass.hopJavascript(url);

    expect(spy).toHaveBeenCalled();
});

Upvotes: 0

Errorname
Errorname

Reputation: 2449

Update

It seems you can't always override eval based on your JS environment (browser or node). See the answer to "How override eval function in javascript?" for more information

Original answer

I think you can redefine eval in your test file:

global.eval = jest.fn()

Upvotes: 1

Related Questions