Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 带karma的React/Flux集成测试:如何在每次测试之前重新加载应用程序_Reactjs_Jasmine_Karma Runner_Reactjs Flux_Flux - Fatal编程技术网

Reactjs 带karma的React/Flux集成测试:如何在每次测试之前重新加载应用程序

Reactjs 带karma的React/Flux集成测试:如何在每次测试之前重新加载应用程序,reactjs,jasmine,karma-runner,reactjs-flux,flux,Reactjs,Jasmine,Karma Runner,Reactjs Flux,Flux,我正在开发一个Browserify React/Flux应用程序,我想对其进行某种UI集成测试。也就是说,使用真正的组件,并且只存根ajax调用 我现在遇到的问题是,在每次测试之后,存储都会用数据进行初始化,因此运行的下一个测试将失败,因为存储的初始状态无效 我希望每次测试都能找到一个新的React应用程序 使用karma+jasmine+browserify时,是否有办法在每次测试前重新启动/重新加载React+通量应用程序 -------编辑1: 对于单元测试,我使用了Jest,但是对于集成

我正在开发一个Browserify React/Flux应用程序,我想对其进行某种UI集成测试。也就是说,使用真正的组件,并且只存根ajax调用

我现在遇到的问题是,在每次测试之后,存储都会用数据进行初始化,因此运行的下一个测试将失败,因为存储的初始状态无效

我希望每次测试都能找到一个新的React应用程序

使用karma+jasmine+browserify时,是否有办法在每次测试前重新启动/重新加载React+通量应用程序

-------编辑1:
对于单元测试,我使用了Jest,但是对于集成测试,我希望使用比jsdom更接近真实浏览器的东西

为此,我使用了带有业力的幻影

测试非常简单:

describe('Dashboard component', function () {

    afterEach(function () {
        clearAjaxStubs();
    });

    it('initializes the OrgStore when mounted and sets the state properly',
     function() {

        stubAjaxCall(require('./Dashboard-contract.json'));


        let dashboard = TestUtils.renderIntoDocument(
             <Dashboard params={{orgId: 'org123'}}/>
        );

        executeAllTimers();

        expect(dashboard.state.orgData.data).toEqual({name: 'orgName'});

    });

});
description('Dashboard component',function(){
在每个(函数()之后){
clearAjaxStubs();
});
它('装载时初始化OrgStore并正确设置状态',
函数(){
stubAjaxCall(require('./Dashboard contract.json');
让dashboard=TestUtils.renderIntoDocument(
);
ExecuteAltimers();
expect(dashboard.state.orgData.data).toEqual({name:'orgName'});
});
});
基本上,当安装仪表板组件时,它将发出一个ajax调用(我为其创建了一个存根),并使用flux数据流使用服务器响应初始化OrgStore。然后,当OrgStore更改并且组件状态更新时,会通知组件

当我只运行这个测试时,测试运行得非常好

当存在多个问题时,问题就会出现:下一个测试将发现OrgStore已使用此测试输入的数据初始化


这就是为什么我想在每次测试之前重新启动React应用程序。

我正试图做完全相同的事情。我认为这会奏效:

beforeach(函数(){
AppDispatcher=require('../../dispatcher/AppDispatcher');
TodoStore=require('../TodoStore');
callback=AppDispatcher.register.mock.calls[0][0];

});您是否真的以浏览器为目标?像网络驱动程序测试?还是使用React TestUtils进行渲染?一个示例测试可能很好。@Davidtroon是的,我的目标是PhantomJs。这不是一个web驱动程序测试,我使用Karma test runner在PhantomJs中运行测试。我添加了一个示例和更多的解释。谢谢。谢谢你的回复,但你的解决方案不适用于我的情况。我不是在开玩笑,我在用因果报应和幻影。Jest不会有这个问题,因为Jest测试用例中的每个需求都会返回模块的新副本。使用Karma和PhantomJs,源代码只加载一次,所有测试套件都使用相同的模块实例运行。这就是为什么每次测试后都不会清除存储@长尾猴