我正试图用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()
};
})
};
});
函数的回调进行测试。有什么想法吗?
答案 0 :(得分:1)
找到我的答案!我的Animated
模拟需要看起来像这样:
jest.mock('Animated', () => {
return {
timing: jest.fn(() => {
return {
start: callback => callback()
};
}),
Value: jest.fn(() => {
return {
interpolate: jest.fn()
};
})
};
});
start
函数传递了一个函数,所以我只需要给我的模拟版本一个运行函数的方法。