Je teste mon GraphQL de l'api à l'aide de la Plaisanterie.
Je suis en utilisant un test de costume pour chaque requête/mutation
J'ai 2 tests (chacun dans un essai séparé costume) où j'ai simulé une fonction (à savoir, de Meteor callMethod
) qui est utilisé dans les mutations.
it('should throw error if email not found', async () => {
callMethod
.mockReturnValue(new Error('User not found [403]'))
.mockName('callMethod');
const query = FORGOT_PASSWORD_MUTATION;
const params = { email: 'user@example.com' };
const result = await simulateQuery({ query, params });
console.log(result);
// test logic
expect(callMethod).toBeCalledWith({}, 'forgotPassword', {
email: 'user@example.com',
});
// test resolvers
});
Quand j' console.log(result)
- je obtenir
{ data: { forgotPassword: true } }
Ce comportement n'est pas ce que je veux, parce que dans .mockReturnValue
- je jeter une Erreur et, par conséquent, s'attendre à result
d'avoir un objet d'erreur
Avant ce test, cependant, un autre est couru
it('should throw an error if wrong credentials were provided', async () => {
callMethod
.mockReturnValue(new Error('cannot login'))
.mockName('callMethod');
Et il fonctionne très bien, l'erreur est levée
Je suppose que le problème est que la maquette n'est pas se réinitialiser après la fin du test.
Dans mon jest.conf.js
j'ai clearMocks: true
Chaque test du costume est dans un fichier séparé, et j'ai simulé des fonctions avant que des tests de ce genre:
import simulateQuery from '../../../helpers/simulate-query';
import callMethod from '../../../../imports/api/users/functions/auth/helpers/call-accounts-method';
import LOGIN_WITH_PASSWORD_MUTATION from './mutations/login-with-password';
jest.mock(
'../../../../imports/api/users/functions/auth/helpers/call-accounts-method'
);
describe('loginWithPassword mutation', function() {
...
Mise à JOUR
Lorsque j'ai remplacé .mockReturnValue
avec .mockImplementation
que tout a fonctionné comme prévu:
callMethod.mockImplementation(() => {
throw new Error('User not found');
});
Mais cela n'explique pas pourquoi dans un autre test, .mockReturnValue
fonctionne très bien...