问题描述
我有一个从api加载一些数据的组件,但是我只需要一次这些数据,因此我不使用reducer和selector。 我只在api调用中使用动作和效果
那是我要测试的代码:
this.model.aggregate([
{
$match: {
participants: userId,},{ $sort: { last_activity: -1 } },{ $limit: 10 },{
$lookup: {
from: "chats",let: { cid: "$_id" },pipeline: [
{
$match: {
$expr: {
$eq: ["$conversation_id",{ $toString: "$$cid" }],{ $sort: { date: -1 } },{ $limit: 1 },],as: "last_message",]);`
我的测试如下:
private loadData() {
const subscriptions: Subscription = new Subscription();
subscriptions.add(
this.actions$
.pipe(ofType(EApiActions.ApiLoaded))
.subscribe((action: ApiLoaded) => {
subscriptions.unsubscribe();
this.data = action.result;
})
);
subscriptions.add(
this.actions$
.pipe(ofType(EApiActions.ApiFailure))
.subscribe((action: ApiFailure) => {
subscriptions.unsubscribe();
})
);
this.store.dispatch(
new ApiRequest()
);
}
测试一直进行到这一行期望(dispatchSpy).toHaveBeenCalledWith(expectedAction);
如您所见,该组件侦听EApiActions.ApiLoaded,所以我尝试使用模拟存储.dispatch(new ApiLoaded([]))调度动作。但什么也没发生,我组件中的代码没有执行
我该如何解决? 这是我使用动作和效果的有效方法吗?还是您认为我应该总是遍历将结果保存到商店的reducer,然后再使用选择器访问它?
解决方法
AndreiGătej给了我提示。谢谢
这是工作测试:
public func paymentQueue(_ queue: SKPaymentQueue,updatedTransactions transactions: [SKPaymentTransaction]) {
for transaction in transactions {
DispatchQueue.main.async {
switch transaction.transactionState {
case .purchased:
SKPaymentQueue.default().finishTransaction(transaction)
case .restored:
SKPaymentQueue.default().finishTransaction(transaction)
case .failed:
SKPaymentQueue.default().finishTransaction(transaction)
default:
break
}
}
}
}