Подтвердить что ты не робот

Проверьте, разрешено ли обещание или отклонено с Жасмином в Нодедже

Я знаю, как это сделать в Mocha, но хочу знать, как это сделать с Jasmine. Я попробовал это

describe('test promise with jasmine', function() {
    it('expects a rejected promise', function() {
        var promise = getRejectedPromise();

        // return expect(promise).toBe('rejected');
        return expect(promise.inspect().state).toBe('rejected');
    });
});

Однако состояние всегда pending, и, конечно, тест терпит неудачу. Я не мог найти ни одного примера в Интернете, чтобы я мог заставить его работать.

Может кто-нибудь, пожалуйста, помогите мне с этим?

Спасибо.

4b9b3361

Ответ 1

Чтобы проверить асинхронный код с жасмином, вы должны использовать его асинхронный синтаксис, например:

describe('test promise with jasmine', function(done) {
    var promise = getRejectedPromise();

    promise.then(function() {
      // Promise is resolved
      done(new Error('Promise should not be resolved'));
    }, function(reason) {
      // Promise is rejected
      // You could check rejection reason if you want to
      done(); // Success
    });
});

Ответ 2

Вы можете использовать блок finnaly для проверки состояния обещания:

it('should resolve if auth succeed', (done)=>{
    var p = server.login('user', 'password');
    p.finally(()=>{
        expect(p.isFulfilled()).toBeTruthy();
        done();
    });
});

Вы можете использовать isFulfilled для проверки выполнения обещаний и метода value для проверки значения выполнения. Соответствующими методами отклонения являются isRejected и reason.

Ответ 3

Ответ @Leonid верен, но вы можете упростить это так и использовать только promises:

it('test promise with jasmine', function() {

    return getRejectedPromise().then(function() {
      // Promise should not be resolved, so we reject it
      return Promise.reject(new Error('Promise should not be resolved'));
    })
    .catch(function(err){
       if(!/Promise should not be resolved/.test(err && err.message)){
          return Promise.reject(err);
       }
    })
})

Ответ 4

Жасмин 2.7 поддерживает возврату promises и будет проверено его состояние.

Чтобы проверить отклонение:

it('test promise with jasmine', async () => {
    try {
        await getRejectedPromise();
    } catch (err) {
        return;
    }

    throw new Error('Promise should not be resolved');
});

или еще:

it('test promise with jasmine', async () => {
    await getRejectedPromise()
        .then(
            () => Promise.reject(new Error('Promise should not be resolved')), 
            () => {});
});

Чтобы проверить фактическое сообщение, помимо обычного instanceof/toBe(), поместите его внутри catch:

expect(() => { throw err }).toThrow(new MyCustomError('Custom error message'));

Преимущество этого подхода состоит в том, чтобы получить более качественное сообщение об ошибке на тестовом выходе.

Ожидаемая функция для выброса MyCustomError: пользовательское сообщение об ошибке, но оно запустило другое сообщение об ошибке.

Несколько лучше, чем обычный выход.

Для проверки разрешенных (не может быть проще):

it('test promise with jasmine', async () => {
    await getRejectedPromise();
});