Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Chai: AssertionError: expected [Function] to be a function (when testing exceptions)

I'm getting this error AssertionError: expected [Function] to be a function when I'm trying to whether a async function throws an error

it('has invalid password', async () => {
    const fakeData = { email: userData.email, password: 'something but not the password!.' }
    expect(async () => { await authService.authenticate(fakeData) }).to.throw(errors.UnauthenticatedError)
})

result:

AssertionError: expected [Function] to be a function
  at Assertion.assertThrows (node_modules/chai/lib/chai/core/assertions.js:1273:32)
  at Assertion.ctx.(anonymous function) (node_modules/chai/lib/chai/utils/addMethod.js:41:25)
  at doAsserterAsyncAndAddThen (node_modules/chai-as-promised/lib/chai-as-promised.js:293:29)
  at Assertion.<anonymous> (node_modules/chai-as-promised/lib/chai-as-promised.js:252:17)
  at Assertion.ctx.(anonymous function) [as throw] (node_modules/chai/lib/chai/utils/overwriteMethod.js:49:33)
  at Context.it (dist/tests/unit/auth-service.spec.js:56:20)
  at Test._mocha2.default.Test.run (node_modules/mocha-http-detect/dist/index.js:84:21)

What did I do wrong?

like image 947
Ivan Lukasevych Avatar asked Apr 14 '17 13:04

Ivan Lukasevych


2 Answers

This is a known issue that happens when you try to pass an async function.

To fix this issue, you can use Chai canary.

More information: https://github.com/chaijs/chai/issues/958

like image 186
skiilaa Avatar answered Nov 14 '22 23:11

skiilaa


If you are using async function, you can also check if it's an AsyncFunction in following way:

const myAsyncFunc = async () => {};

expect(myAsyncFunc).to.be.a('AsyncFunction');
like image 41
ritesh Avatar answered Nov 14 '22 22:11

ritesh