首页 > 解决方案 > Redux Saga 还没开始?

问题描述

我写了这些动作和传奇来倾听它们。

export async function addToWishlistApi(id: number) {
  console.log("addToWishlistApi HELLO CAN ANYBODY HEAR ME");
  const res = await axios.get(WishlistUrls.add(id));
  console.log(res);
}
export function* addToWishlistSaga({ id }: { id: number }): Saga<void> {
  console.log("addToWishlistSaga HELLO CAN ANYBODY HEAR ME");
  try {
    const res = yield call(addToWishlistApi, id);
    console.log(res);
    const wishlist = yield call(getCurrentWishlist);
    console.log("WISHLIST", wishlist);
    if (wishlist.contains(id))
      yield put({ type: DealActionTypes.wishlistSuccess });
  } catch (error) {
    console.log("ERROR", error);
  }
}

export async function getCurrentWishlist(): Promise<number[]> {
  const res = await axios.get(WishlistUrls.getWishlist);
  console.log(res.data.includes("WISHLIST-2.HTML"));

  const $ = cheerio.load(res.data);
  const tags = $(".button.yith-wcqv-button");
  const idStrings: string[] = [];
  tags.each((i, tag) => {
    idStrings.push(tag.attribs["data-product_id"]);
  });
  const wishlist = idStrings.map(n => Number(n));
  return wishlist;
}

export default function* wishlistSaga(): Saga<void> {
  yield all([
    yield takeEvery(DealActionTypes.addToWishlistStart, addToWishlistSaga),
    yield takeEvery(
      DealActionTypes.removeFromWishlistStart,
      removeFromWishlistSaga
    )
  ]);
}

我正在尝试测试recordSaga

import { runSaga } from "redux-saga";
export default async function recordSaga(saga, initialAction) {
  const dispatched = [];

  await runSaga(
    { dispatch: action => dispatched.push(action) },
    saga,
    initialAction
  ).done;

  return dispatched;
}

这是我的测试:

describe("addToWishlistSaga", () => {
    const startAction: Type.AddToWishlistStartAction = {
      type: Types.addToWishlistStart,
      id: deal.id
    };
    const successAction: Type.WishlistSuccessAction = {
      type: Types.wishlistSuccess
    };
    const failureAction: Type.AddToWishlistFailureAction = {
      type: Types.addToWishlistFailure,
      id: deal.id
    };

    fit("dispatches a success action on success", async () => {
      const dispatched = await recordSaga(wishlistSaga, startAction);
      expect(dispatched).toContainEqual(successAction);
    });
    xit("dispatches a failure action on failure", async () => {
      mock.onGet(WishlistUrls.add(deal.id)).networkErrorOnce();

      const dispatched = await recordSaga(wishlistSaga, startAction);
      expect(dispatched).toContainEqual(failureAction);
    });
  });
});

saga 设置和测试设置与我在其他项目中成功使用的相同,但由于某种原因addToWishlistSaga从未运行过。没有任何绝望的日志语句被打印出来,并且dispatched返回为空。

我在这里做错了什么?我的头快要爆炸了。

标签: javascriptunit-testingreduxredux-saga

解决方案


推荐阅读