Javascript函数返回undefined而不是number

时间:2017-11-24 22:04:23

标签: javascript ecmascript-6 jestjs

我有以下JavaScript函数,它是更大脚本的一部分:

const sub = 'L';

export function getFeedData (sub) {
    var feedId;
    switch (sub) {
        case '1': case '2': case '3': case '4': case '5': case '6': case 'S':
            feedId = 1;
            break;
        case 'A': case 'C': case 'E':
            feedId = 26;
            break;
        case 'N': case 'Q': case 'R': case 'W':
            feedId = 16;
            break;
        case 'B': case 'D': case 'F': case 'M':
            feedId = 21;
            break;
        case 'L':
            feedId = 2;
            break;
        case 'G':
            feedId = 31;
            break;
    }
    if (feedId === 2) {
        var feed = require('./MockData');
    }
    return {
        feed: feed,
        feedId: feedId
    };
}

我已经测试了这个脚本中的所有其他功能,并且它们正常工作。对于这个函数,这是我的测试(我正在使用Jest,因为这是一个更大的React应用程序的一部分)。

import React from 'react';
import {getFeedData} from '../mocks/apiMock';

it('returns 2 as the feedId when L is sub parameter for getFeedData', () => {
    expect(getFeedData.feedId).toBe(2);
});

it('outputs feed from getFeedData', () => {
    expect(getFeedData.feed).toBeDefined;
}); 

这些测试的后者正在过去 - 不知道为什么会发生这种情况。

第一个是我更关心的问题。它返回undefined为getFeedData.feedId因此失败。我是用JavaScript自学的,我确信我在这个函数中犯了一个愚蠢的错误,这就是为什么getFeedData.feedId未定义的原因。如果有人能指出这个愚蠢的错误,我会非常感激。

1 个答案:

答案 0 :(得分:1)

测试不是调用函数,而是尝试访问函数对象本身的feedId属性。

第二次测试通过,因为getFeedData.feed确实是undefined。但这并不意味着这个测试用例是正确的。意图可能是调用函数,参数在交换机中没有映射, 然后验证其值是否未定义。

it('returns 2 as the feedId when L is sub parameter for getFeedData', () => {
    expect(getFeedData("L").feedId).toBe(2);
});

it('outputs feed from getFeedData', () => {
    expect(getFeedData("?").feed).toBeDefined;
});