मैं fileA.js का परीक्षण कर रहा हूं, जिसके लिए fileB.js की आवश्यकता है

fileA.test.js में, मैं fileB.js से एक को छोड़कर सभी विधियों का मजाक उड़ाना चाहता हूं।

fileA.test.js में मेरे पास है:

const common = require("../src/fileB");
jest.mock("../src/fileB");

एक तरीका है जिसका मैं मजाक नहीं बनाना चाहता। क्या नोडजेएस में इस तरह की चीज संभव है?

धन्यवाद।

7
Alessandroempire 25 अक्टूबर 2019, 18:45

1 उत्तर

सबसे बढ़िया उत्तर

आप उपयोग कर सकते हैं jest.mock और jest.requireActual(moduleName) मॉड्यूल के तरीकों/कार्यों का आंशिक नकली।

उदाहरण के लिए:

a.js:

const b = require('./b');

exports.main = function main() {
  console.log(b.method1());
  console.log(b.method2());
  console.log(b.method3());
};

b.js:

module.exports = {
  method1: function() {
    return 'method 1';
  },

  method2: function() {
    return 'method 2';
  },

  method3: function() {
    return 'method 3';
  }
};

अब, हम method3 को छोड़कर b.js के सभी तरीकों का मजाक उड़ाएंगे।

a.spec.js:

jest.mock('./b', () => {
  const originalB = require.requireActual('./b');
  const partialMockedB = Object.keys(originalB).reduce((pre, methodName) => {
    pre[methodName] = jest.fn();
    return pre;
  }, {});
  return {
    ...partialMockedB,
    method3: originalB.method3 // mock all methods of b except method3
  };
});

const { main } = require('./a');
const b = require('./b');

describe('main', () => {
  test('should correct', () => {
    const logSpy = jest.spyOn(console, 'log');
    b.method1.mockReturnValueOnce('mocked method 1');
    b.method2.mockReturnValueOnce('mocked method 2');
    main();
    expect(logSpy.mock.calls[0]).toEqual(['mocked method 1']);
    expect(logSpy.mock.calls[1]).toEqual(['mocked method 2']);
    expect(logSpy.mock.calls[2]).toEqual(['method 3']);
  });
});

यूनिट परीक्षा परिणाम:

 PASS  src/stackoverflow/58561765/a.spec.js
  main
    ✓ should correct (18ms)

  console.log node_modules/jest-mock/build/index.js:860
    mocked method 1

  console.log node_modules/jest-mock/build/index.js:860
    mocked method 2

  console.log node_modules/jest-mock/build/index.js:860
    method 3

Test Suites: 1 passed, 1 total
Tests:       1 passed, 1 total
Snapshots:   0 total
Time:        3.65s

स्रोत कोड: https://github.com/mrdulin/jest -कोडलैब/ट्री/मास्टर/src/स्टैक ओवरफ्लो/58561765

4
slideshowp2 20 जिंदा 2021, 05:26