2017-01-12 15 views
0

Я пытаюсь утвердить действие от redux, которое имеет функцию стрелки, и, учитывая, что оно создает новую ссылку, я не могу утверждать ее с помощью chai.Assert arrow function on mocha

Вот код:

export function save(product) { 
    return { 
    types: ['REQUEST', 'SUCCESS', 'FAILED'], 
    callAPI:() => fetchSomething() 
    payload: { 
     product 
    } 
    }; 
} 

export function saveOrUpdate(product) { 
    return product.id ? update(product) : save(product); 
} 

И я пытался сделать что-то вроде этого на мой тест:

const action = saveOrUpdate(product); 
expect(action).to.be.eql(save(product)); 

Это не работал из-за свойства callAPI, так что я имею попробовал этот подход, используя Chai-подмножество, игнорируя свойство callAPI, но он чувствует, как взломать:

const action = saveOrUpdate(product); 
const {types, payload} = save(product); 
expect(action).to.containSubset({ 
    types, 
    payload 
}); 

там так или иначе утверждать, используя первый подход?

Спасибо!

+0

Я думаю, проблема заключается в том, что вы вызываете 'save' в качестве параметра функции' eql'. Может быть, нам нужно найти другой способ проверить, что 'save' был вызван вместо' update' – alayor

ответ

0

Как вы выяснили, как у вас есть код каждый раз, когда функция save называется виртуальная машина JavaScript должен создать новый экземпляр Function. Вы можете просто заменить это ссылкой на одну функцию, которая создается раз и навсегда и используется повторно. Это сделало бы тестирование на равенство тривиальным.

Если вас беспокоит callAPI, вызываемый с плохими аргументами, вы можете обернуть fetchSomething, как я делаю здесь;

function callFetchSomething() { 
    fetchSomething(); 
} 

export function save(product) { 
    return { 
    types: ['REQUEST', 'SUCCESS', 'FAILED'], 
    callAPI: callFetchSomething, 
    payload: { 
     product 
    } 
    }; 
} 

Если вам не нужна защита от неправильных вызовов, то вы можете просто callAPI: fetchSomething.

+0

Спасибо @Louis! Это был единственный способ, который пришел мне на ум ... –

0

Я думаю, вы можете использовать Chai Spies, чтобы проверить, что метод save был вызван.

var spy = chai.spy(save); 
const action = saveOrUpdate(product); 
expect(spy).to.have.been.called(); 

 Смежные вопросы

  • Нет связанных вопросов^_^