首页 > 解决方案 > JavaScript:Jest 无法识别静态函数

问题描述

我正在关注一个使用 jest 测试 javascript 的教程。讲师在一个名为genesis()的类上创建了一个静态函数Block,它对他来说工作得很好,但是当我尝试这样做时,我得到了TypeError: block.genesis is not a function. 如果我删除static关键字,它会识别函数并且测试通过。

这是课程:

const { GENESIS_DATA } = require('./config');

class Block {
    constructor({ timestamp, lastHash, hash, data }) {
        this.timestamp = timestamp;
        this.lastHash = lastHash;
        this.hash = hash;
        this.data = data;
    }

    static genesis() {
        return new Block(GENESIS_DATA);
    }
}

module.exports = Block;

和测试:

const Block = require('./block');
const { GENESIS_DATA } = require('./config');

describe('Block', () => {
    const timestamp = 'a-date';
    const lastHash = 'a-hash';
    const hash = 'another-hash';
    const data = ['blockchain', 'data'];
    const block = new Block({ timestamp, lastHash, hash, data });

    describe('genesis()', () => {
        const genesisBlock = block.genesis();

        it('returns a block instance', () => {
            expect(genesisBlock instanceof Block).toBe(true);
        });

        it('returns the genesis data', () => {
            expect(genesisBlock).toEqual(GENESIS_DATA);
        });
    });
});

标签: javascriptjestjs

解决方案


genesis方法是类的一部分,而不是实例。你想打电话Block.genesis()而不是block.genesis()


推荐阅读