Reactjs 带karma的React/Flux集成测试:如何在每次测试之前重新加载应用程序
我正在开发一个Browserify React/Flux应用程序,我想对其进行某种UI集成测试。也就是说,使用真正的组件,并且只存根ajax调用 我现在遇到的问题是,在每次测试之后,存储都会用数据进行初始化,因此运行的下一个测试将失败,因为存储的初始状态无效 我希望每次测试都能找到一个新的React应用程序 使用karma+jasmine+browserify时,是否有办法在每次测试前重新启动/重新加载React+通量应用程序 -------编辑1: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,但是对于集成
对于单元测试,我使用了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,源代码只加载一次,所有测试套件都使用相同的模块实例运行。这就是为什么每次测试后都不会清除存储@长尾猴