【问题标题】:React/Flux integration test with karma: How to reload application before each testReact/Flux 与 karma 的集成测试:如何在每次测试之前重新加载应用程序
【发布时间】:2015-12-04 19:40:16
【问题描述】:

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

我现在遇到的问题是,在每次测试之后,商店都会使用数据进行初始化,因此由于商店的初始状态无效,下一次运行的测试将失败。

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

当使用 karma + jasmine + browserify 时,有没有办法在每次测试之前重新启动/重新加载 React+Flux 应用程序?

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

为此,我使用 PhantomJs 和 Karma

测试很简单:

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'});

    });

});

基本上,当 Dashboard 组件被挂载时,它会进行 ajax 调用(我为此创建了一个存根),并将使用通量数据流使用服务器响应初始化 OrgStore。然后当 OrgStore 发生变化并更新组件状态时通知组件。

当我只运行这个测试时,测试运行良好。

当有多个时会出现问题:下一个测试会发现 OrgStore 已经使用该测试放入的数据进行了初始化。

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

【问题讨论】:

  • 您实际上是针对浏览器的吗?像网络驱动程序测试?还是你使用 React TestUtils 来渲染?一个示例测试可能会很好。
  • @DavinTryon 是的,我的目标是 PhantomJs。这不是网络驱动程序测试,我正在使用 Karma 测试运行器在 PhantomJs 中运行测试。我添加了一个示例和更多解释。谢谢。

标签: reactjs jasmine karma-runner reactjs-flux flux


【解决方案1】:

我正在尝试做同样的事情。我认为这会奏效:

  beforeEach(function() {
    AppDispatcher = require('../../dispatcher/AppDispatcher');
    TodoStore = require('../TodoStore');
    callback = AppDispatcher.register.mock.calls[0][0];
  });

(来自:http://facebook.github.io/react/blog/2014/09/24/testing-flux-applications.html#putting-it-all-together

他们在这里所做的是在每次测试之前重新要求 App 模块,理论上这应该重置商店(这似乎是每个人都遇到的主要问题)。

【讨论】:

  • 感谢您的回复,但您的解决方案不适用于我的情况。我没有使用 Jest,我使用的是 Karma 和 PhantomJs。 Jest 不会有这个问题,因为 jest 测试用例中的每个 require 都会返回模块的新副本。使用 Karma 和 PhantomJs,源加载一次,所有测试套件都使用相同的模块实例运行。这就是为什么每次测试后都不会清理商店的原因。 @theloniusmonkey
猜你喜欢
  • 2020-04-22
  • 1970-01-01
  • 2022-11-12
  • 2012-10-28
  • 2010-10-30
  • 1970-01-01
  • 1970-01-01
  • 2018-03-13
相关资源
最近更新 更多