2016-08-02 24 views
5

Ben şöyle bir API çağrısı tetikler addItemsToCollection denilen bir eylem vardır:'Redux-api-middleware' ve [CALL_API] kullanan redux eylemleri nasıl test edilir?

it('should create an action to add items to a collection',() => 
{ 
    const collectionId = 1; 
    const itemIds = [1,2,3]; 

    const expectedAction = 
    { 
    [CALL_API]: 
    { 
     endpoint: `/collections/${collectionId}/items`, 
     method: 'POST', 
     body: JSON.stringify(itemIds), 
     types: 
     [ 
     ADD_ITEMS, 
     { type: ADD_ITEMS_SUCCESS }, 
     ADD_ITEMS_FAIL 
     ] 
    } 
    }; 

    expect(addItemsToCollection(collectionId, itemIds)).toEqual(expectedAction); 
}); 

O yapar:

import {CALL_API} from 'redux-api-middleware'; 

export function addItemsToCollection(collectionId, itemIds) 
{ 
    return {[CALL_API]: 
    { 
     endpoint: `/collections/${collectionId}/items`, 
     method: 'POST', 
     body: JSON.stringify(itemIds), 
     types: 
     [ 
     ADD_ITEMS, 
     { type: ADD_ITEMS_SUCCESS }, 
     ADD_ITEMS_FAIL 
     ] 
    } 
    }; 
} 

Bu eylem için sadece bir test yazmaya çalışıyorum

gibi yaratılıyor pass, ancak actionAcute fonksiyonu için olduğu gibi beklenenActionAction için boş nesneyi {} döndürdüğü için boştur. Fazla kullanım.

Yani benim sorular burada,

Neden boş nesneler iade ediliyor?

Bu testi yapmanın uygun yolu nedir?

const expectedAction = 
{ 
    [CALL_API]: { 
    endpoint: '/collections/1/items', 
    method: 'POST', 
    body: "[1,2,3]", 
    types: 
    [ 
     ADD_ITEMS, 
     { type: ADD_ITEMS_SUCCESS }, 
     ADD_ITEMS_FAIL 
    ] 
    } 
}; 

Sonunda sabitleri alay ve ham verileri kullanabilirsiniz: test ettiğiniz şeyin bir parçası olduğundan

cevap

0

Kişisel beklenen veriler hesaplanır edilmemelidir.

Boş nesneleriniz için içe aktarma, alaylara ve test araçlarınıza bağlı olabilir. Çok fazla seçenek var.

1

CALL_API bir Semboldür. Nesneyi yalnızca console.log'a iletirken görünmezler. Nesnede anahtarı görmek istiyorsanız Object.getOwnPropertySymbols(expectedAction) yapabilir veya console.log(expectedAction[CALL_API]) yapabilirsiniz ve bu nesneyi alacaksınız. (http://exploringjs.com/es6/ch_symbols.html)

Siz bunu doğru test ediyorsunuz. Boş bir nesne kullanacak olsaydınız, eşleşmezdi. Farklı bir Sembole sahip bir nesne kullanırsanız, eşleşmez.

0

Bu sorunu yaşayan herkes için, redux-api-middleware'den sahte mağazanıza {apiMiddleware} eklemeniz gerekir.

İlgili konular