Jest - 使用React Native Animated的Redux动作创建者

时间:2017-09-17 19:48:41

标签: reactjs react-native jestjs

我正试图用Jest测试一个redux动作。当涉及使用React Native模拟动画库时,我遇到了一个问题。这是我的代码(浓缩):

#include <tuple>
#include <iostream>
#include <type_traits>

struct nothing { };

template <typename T>
constexpr bool is_nothing_v = std::is_same<std::decay_t<T>, nothing>::value;

template <bool B, typename ... Ts>
constexpr auto pick_if (Ts && ... xs)
 {
   if constexpr ( B )
      return std::forward_as_tuple(std::forward<Ts>(xs)...);
   else
      return std::tuple{};
 }

template <typename F, typename ... Ts>
constexpr decltype(auto) call_ignoring_nothing (F && f, Ts && ... xs)
 {
   return std::apply(f,
      std::tuple_cat(pick_if<!is_nothing_v<Ts>>(std::forward<Ts>(xs))...)
   );
 }

float foo (int a, float b) { return a + b; }

int main ()
 {
   std::cout << call_ignoring_nothing(foo, nothing{}, 12, nothing{},
      2.3f, nothing{}); // print 14.3    
 }

在我的测试中,我试图比较调度的动作,但我似乎无法通过// action.js const loginAction = () => { Animated.timing(animation, { toValue: 0, duration: 600 }).start(() => { dispatch({ type: 'LOGIN_SUCCESS' }); }); } // mock-setup.js jest.mock('Animated', () => { return { timing: jest.fn(() => { return { start: jest.fn() }; }), Value: jest.fn(() => { return { interpolate: jest.fn() }; }) }; }); 函数的回调进行测试。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

找到我的答案!我的Animated模拟需要看起来像这样:

jest.mock('Animated', () => {
  return {
    timing: jest.fn(() => {
      return {
        start: callback => callback()
      };
    }),
    Value: jest.fn(() => {
      return {
        interpolate: jest.fn()
      };
    })
  };
});

start函数传递了一个函数,所以我只需要给我的模拟版本一个运行函数的方法。