Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
165 views
in Technique[技术] by (71.8m points)

javascript - Possibly not completely understanding exports or jest

Just going over some exercises so I can get more proficient at jest and I'm a little confused about something.

Here is the test subject:

function createRange(start, end) {
    let range = [];

    for (i = start; i <= end; i++) {
        range.push(i);
    }

    return range;
}

function sumRange(start, end) {
    const range = createRange(start, end);
    let sum = 0;

    range.forEach((el) => (sum += el));

    return sum;
}

module.exports = createRange;
module.exports = sumRange;

And this is the test:

const sumRange = require('./sumRange');
const createRange = require('./sumRange');

describe('sumRange()', () => {
    it('sums a given range', () => {
        expect(sumRange(1, 3)).toEqual(6);
    });
});

describe('createRange()', () => {
    it('creates a range between given arguments 1-3', () => {
        expect(createRange(1, 3)).toEqual([1, 2, 3]);
    });

    it('creates a range between given arguments 7-17', () => {
        expect(createRange(7, 11)).toEqual([7, 8, 9, 10, 11]);
    });
});

I first started testing the createRange function and tests were passing. Then moved on to the sumRange function. Once I started testing sumRange the createRange test started failing and were showing the results for sumRange. The results are below:

FAIL ./sumRange.spec.js sumRange() ? sums a given range (4 ms) createRange() ? creates a range between given arguments 1-3 (3 ms) ? creates a range between given arguments 7-17 (1 ms)

● createRange() ? creates a range between given arguments 1-3

expect(received).toEqual(expected) // deep equality

Expected: [1, 2, 3]
Received: 6

  10 | describe('createRange()', () => {
  11 |     it('creates a range between given arguments 1-3', () => {
> 12 |         expect(createRange(1, 3)).toEqual([1, 2, 3]);
     |                                   ^
  13 |     });
  14 | 
  15 |     it('creates a range between given arguments 7-17', () => {

  at Object.it (ch4_DataStructures/sumRange.spec.js:12:35)

● createRange() ? creates a range between given arguments 7-17

expect(received).toEqual(expected) // deep equality

Expected: [7, 8, 9, 10, 11]
Received: 45

  14 | 
  15 |     it('creates a range between given arguments 7-17', () => {
> 16 |         expect(createRange(7, 11)).toEqual([7, 8, 9, 10, 11]);
     |                                    ^
  17 |     });
  18 | });
  19 | 

  at Object.it (ch4_DataStructures/sumRange.spec.js:16:36)

Test Suites: 1 failed, 1 total Tests: 2 failed, 1 passed, 3 total Snapshots: 0 total Time: 0.856 s, estimated 1 s Ran all test suites matching /sumRange.spec.js/i.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

The problem is that you are setting module.exports twice, which makes it set to sumRange so you are testing sumRange in both areas. You could do this instead:

module.exports = { createRange, sumRange };

And then import it with:

const { createRange, sumRange } = require("./sumRange");

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...