jasmine - 如何使用 Jest 测试回流 Action

标签 jasmine jestjs refluxjs

我在测试 Reflux 操作是否在我的应用程序中正确触发时遇到了困难,实际上它们似乎根本不适用于 Jest。我有这个示例测试:

jest.autoMockOff();

describe('Test', function () {
  it('Tests actions', function () {
    var Reflux = require('../node_modules/reflux/index');

    var action = Reflux.createAction('action');
    var mockFn = jest.genMockFn();

    var store = Reflux.createStore({
      init: function () {
        this.listenTo(action, this.onAction);
      },
      onAction: function () {
        mockFn();
      }
    });

    action('Hello World');
    expect(mockFn).toBeCalled();
  });
});

哪些输出:
● Test › it Tests actions
  - Expected Function to be called.
    at Spec.<anonymous> (__tests__/Test.js:20:20)
    at Timer.listOnTimeout [as ontimeout] (timers.js:112:15)

即使使用 Jasmine 异步函数,它似乎也不起作用
jest.autoMockOff();

describe('Test', function () {
  it('Tests actions', function () {
    var Reflux = require('../node_modules/reflux/index');

    var action = Reflux.createAction('action');
    var mockFn = jest.genMockFn();

    var flag = false;

    var store = Reflux.createStore({
      init: function () {
        this.listenTo(action, this.onAction);
      },
      onAction: function () {
        mockFn();
        flag = true;
      }
    });

    runs(function () {
      action();
    });

    waitsFor(function () {
      return flag;
    }, 'The action should be triggered.', 5000);

    runs(function () {
      expect(mockFn).toBeCalled();
    });
  });
});

给我...
FAIL  __tests__/Test.js (6.08s)
● Test › it Tests actions
  - Throws: [object Object]

有没有人做过这个工作?

最佳答案

我想到了!我只需要使用 Jest 自己的方法来快速转发任何计时器。即只需添加行

jest.runAllTimers();

所以我的第一个例子的工作版本是
jest.autoMockOff();

describe('Test', function () {
  it('Tests actions', function () {
    var Reflux = require('../node_modules/reflux/index');

    var action = Reflux.createAction('action');
    var mockFn = jest.genMockFn();

    var store = Reflux.createStore({
      init: function () {
        this.listenTo(action, this.onAction);
      },
      onAction: function () {
        mockFn();
      }
    });

    action('Hello World');

    jest.runAllTimers();

    expect(mockFn).toBeCalled();
  });
});

关于jasmine - 如何使用 Jest 测试回流 Action ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28463189/

相关文章:

javascript - 混合 $q 和 ES6 promise 时测试 Angular

Angular 2 测试 : Async callback was not invoked within timeout specified by jasmine. DEFAULT_TIMEOUT_INTERVAL

angular - 如何使用 ngx-translate 的 TranslatePipe 测试组件?类型错误 : Cannot read properties of undefined (reading 'subscribe' )

jestjs - 将自定义参数传递给 jest

javascript - 尝试使用 Jasmine spy 并收到 "is not a function"错误

node.js - 如何用 Jest 模拟所需的模块功能?

firebase - 使用 Firebase Auth 模拟器以编程方式创建用户

javascript - 使用reactjs,更新列表中的项目而不更新整个列表?

reactjs - react +回流: Passing Variables to Data Stores

javascript - 直接监听组件中的 Reflux Actions