【问题标题】:Why is my react unit test import not working?为什么我的反应单元测试导入不起作用?
【发布时间】:2018-07-12 17:44:51
【问题描述】:

当我运行npm run watch 时,navList.js 是正确的。

但是当我尝试运行npm test 时,日志只显示setArticleGroup: 1(缺少setArticleGroup: 2setArticleGroup: 3)。

我发现getArticlesFromDatabase在测试中不起作用,为什么会这样?

navList.test.js

it('function setArticleGroup() ', function () {
    let app = shallow(<NavList sieve="info" />);
});

navList.js

import {getArticlesFromDatabase} from '../csrfData';

setArticleGroup(){
    let that = this;
    console.log('setArticleGroup: 1   ');

    getArticlesFromDatabase.then(function(value) {
        console.log('setArticleGroup: 2   ');

        ...//skip

        that.setState({'articleGroup':articleGroup},()=>{
            console.log('setArticleGroup: 3   ',articleGroup);
        });
    });
}

csrfData.js

var getArticlesFromDatabase = new Promise(function(resolve, reject) {
    let articles;
    axios.get('../api/articles/get-articles-list').then(response=>{
        articles = response.data.list;
        resolve(articles);
    }).catch(function (error) {
        console.log(error);
    });
});

export {getArticlesFromDatabase,testCsrfData};

【问题讨论】:

    标签: javascript reactjs unit-testing


    【解决方案1】:

    除非getArticlesFromDatabase 是一个具有then 函数作为属性的对象,否则我会说你应该这样调用它(注意括号):

    getArticlesFromDatabase().then(function(value) {
    

    【讨论】:

    • 什么意思?如果我将 getArticlesFromDatabase.then(function(value) {}) 更改为 getArticlesFromDatabase().then(function(value) {}),则会出错。
    • 我认为getArticlesFromDatabase 将是一个承诺返回函数,因为then 被附加到它上面。如果没有看到从csrfData 导入的代码,我无法弄清楚更多。
    • 您好,很抱歉这么晚才回复。我已经添加了 csrfData.js,请帮助。
    • 对不起,你是对的。我不知道你是如何配置 axios 来处理 HTTP 错误的,但如果它们没有抛出错误,你可以检查 .then 函数中返回的状态码:console.log(response.status)
    • 感谢您的建议,您说得对,问题来自捕获。所以我新了一个我认为是主要问题的问题。感谢帮助。 stackoverflow.com/questions/48658252/…
    猜你喜欢
    • 1970-01-01
    • 2023-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-26
    • 1970-01-01
    • 2012-08-15
    • 1970-01-01
    相关资源
    最近更新 更多