Open CapitanRedBeard opened 6 years ago
I understand that manually mocking each file is a workaround here: https://github.com/kriasoft/react-starter-kit/issues/491 and https://github.com/facebook/jest/issues/678
but I have a massive project and this is not a scalable solution.
Could you create an actual project that someone can pull down and play with to reproduce the problem?
at Object.<anonymous> (src/utils/fooHelper.js:31:31)
at Object.<anonymous> (src/modules/baz/index.js:58:20)
at Object.<anonymous> (src/modules/bar/index.js:50:18)
at Object.<anonymous> (src/modules/foo/index.js:66:13)
at Object.<anonymous> (src/modules/foo/index.spec.js:3:14)
Maybe I'm missing something, but can you disclose fooHelper, baz, and bar?
I got the similar error as well when I set automock: true
in jest.config.json
:
Failed to get mock metadata: /Users/deepak/example-app/node_modules/process-nextick-args/index.js
See: http://facebook.github.io/jest/docs/manual-mocks.html#content
at Runtime._generateMock (node_modules/jest-runtime/build/index.js:498:15)
at Object.<anonymous> (node_modules/readable-stream/lib/_stream_readable.js:26:11)
at Object.<anonymous> (node_modules/readable-stream/readable.js:12:30)
I was trying to use this config to avoid calling jest.mock('../../my-module');
in every test file.
When I run jest with automock: true
I get some issues as well:
node-rdkafka
fails with the error Cannot read property 'errorCodes' of undefined
After some investigation, I see that this is the part of the code where it creates the object from the bindings it has with the underlying C library. It's a bit complex so I fixed it by just creating a manual mock.However,
Now I get the following error:
received value must be a Promise.
Received: undefined
When I'm running tests. My module returns a named async function which in fact does return a promise. It works fine without having automock turned on.
+1
Had anyone solved this issue? Thanks.
+1
This is causing a lot of issues for my project. Appreciate if anyone can update here if they find a solution. Cheers! :)
I'm having the same problem. Here is another error that can occure:
TypeError: Cannot read property 'default' of undefined
at node_modules/react-native/Libraries/vendor/emitter/EventSubscription.js:15:21
at Object.<anonymous> (node_modules/react-native/Libraries/vendor/emitter/EventSubscription.js:22:2)
at Object.require (node_modules/react-native/Libraries/vendor/emitter/EmitterSubscription.js:13:27)
Maybe that helps to make this issue better queryable :)
+1
Perhaps under "automock": true
it becomes user's responsibility to unmock those modules that are being tested?
I am getting "TypeError: Cannot read property 'default' of undefined" from node_module which I expect to be automocked.
FAIL src/components/BillingProfile.spec.ts
● Test suite failed to run
TypeError: Cannot read property 'default' of undefined
15 | class="text-red"
16 | clickable
> 17 | @click="devfill()"
| ^
18 | >
19 | [DEV] autofill
20 | </div>
at Object.<anonymous> (node_modules/quasar/src/components/form/QForm.js:8:16)
at src/components/BillingProfile.vue:17:37
at Object.<anonymous> (src/components/BillingProfile.vue:411:3)
at Object.<anonymous> (src/components/BillingProfile.spec.ts:2:1)
test
import { shallowMount } from '@vue/test-utils';
import BillingProfile from './BillingProfile.vue';
jest.enableAutomock();
jest.unmock('@vue/test-utils');
jest.unmock('./BillingProfile.vue');
const wrapperFactory = (options = {}) => {
return shallowMount(BillingProfile, {
mocks: {
$route: { path: '/' },
$store: {},
},
...options,
});
};
describe('BillingProfile', () => {
it.only('renders a signup form when user is not present', () => {
const wrapper = wrapperFactory();
expect(wrapper.find('.message').text()).toEqual(
'Welcome to the Vue.js cookbook'
);
});
});
jest config
module.exports = {
// preset reference: https://github.com/vuejs/vue-cli/blob/dev/packages/%40vue/cli-plugin-unit-jest/presets/default/jest-preset.js
preset: '@vue/cli-plugin-unit-jest/presets/typescript-and-babel',
testMatch: ['**/*.spec.ts'],
moduleNameMapper: {
'^@/types$': '<rootDir>/src/types/index.d',
'^@env$': '<rootDir>/src/env/env.dev',
},
transformIgnorePatterns: ['node_modules/(?!(quasar|quasar/*|@quasar|@quasar/*))'],
};
+1
Having the same issue. Here is the error:
TypeError: Cannot read property 'default' of undefined
at Object.<anonymous> (node_modules/zen-observable-ts/src/zenObservable.ts:23:10)
at Object.<anonymous> (node_modules/zen-observable-ts/src/index.ts:1:1)
@cpojer @aaronabramov @SimenB can we shed some light on this issue, please? 😄 When using automock: true
, Jest will throw errors on certain node modules. Manually mocking using jest.mock("name_of_node_module")
works but requires us to write a bunch of jest.mocks which is not very scalable. Maybe there is a simple fix?
I would expect that automock:true
calls jest#mock
under the hood for all imported modules, so seems strange why one works over the other.
Here's a super simple example, as requested:
This works when config is { automock: false, testEnvironment: "node" }
const admin = require("firebase-admin");
jest.mock("firebase-admin");
test("hello", () => {
expect(true).toBe(true);
});
This breaks when { automock:true, testEnvironment: "node" }
const admin = require("firebase-admin");
test("hello", () => {
expect(true).toBe(true);
});
Error:
FAIL ./testjest.spec.js
● Test suite failed to run
TypeError: Cannot read property 'message' of undefined
at Error.get (node_modules/firebase-admin/lib/utils/error.js:64:35)
at Array.forEach (<anonymous>)
at Array.forEach (<anonymous>)
at Array.forEach (<anonymous>)
Test Suites: 1 failed, 1 total
Tests: 0 total
Snapshots: 0 total
Time: 0.778 s, estimated 1 s
Ran all test suites matching /testjest.spec.js/i.
Environment Details
Jest Version: v26.6.3
Node Version: v10.20.1
firebase-admin Node Module Version: v9.5.0
Appreciate your time!
@govindrai Do you have a solution for this problem?
+1
The note on the automock config says:
Node modules are automatically mocked when you have a manual mock in place (e.g.: mocks/lodash.js). More info here.
Which is also broken: https://github.com/facebook/jest/issues/12777
So, I think in general automocking has had a lot of regressions.
I am having this issue as well. It happens regardless of whether I set automock: true
in jest.config.js
, or run jest.enableAutomock()
in my files.
Error message for all test suites:
● Test suite failed to run
Failed to get mock metadata: /home/jordan/Documents/axle-mono/frontend/node_modules/lodash/_freeGlobal.js
See: https://jestjs.io/docs/manual-mocks#content
at Runtime._generateMock (node_modules/jest-runtime/build/index.js:1901:15)
at Object.<anonymous> (node_modules/lodash/_root.js:1:100)
I should also not the documentation pointed to by the error message does not work out of the box. I am using TypeScript and jest version 27.5.1
packaged with CRA.
I got this error when i enable automock:
● Test suite failed to run
TypeError: Cannot read properties of undefined (reading 'initTestEnvironment')
> 1 | import 'jest-preset-angular/setup-jest';
| ^
at Object.<anonymous> (node_modules/jest-preset-angular/setup-jest.js:11:13)
at Object.<anonymous> (setup-jest.ts:1:1)
Do you want to request a feature or report a bug?
Bug
What is the current behavior?
Running this in my tests:
Here is what my
index.js
looks likeHere is what happens when I run jest:
So given that I can't use
automocking: false
, I tried setting it to true which gives this error:Setting:
Also just presents another error:
And setting unmocking
jest-jasmine2
doesn't seem to fix it.If the current behavior is a bug, please provide the steps to reproduce and either a repl.it demo through https://repl.it/languages/jest or a minimal repository on GitHub that we can
yarn install
andyarn test
.run
node scripts/test.js --env=jsdom
What is the expected behavior?
Ideally I could just grab a simple enum from a file with out jest resolving everything (I have a massive app). But if that's too complicated then I would love for automock to work out of the box.
Please provide your exact Jest configuration
Run
npx envinfo --preset jest
in your project directory and paste the results hereThanks!