Жасмин - любое булево (jasmine.any(булеанское))

Я пишу модульные тесты для angular с использованием кармы, жасмина. Попробуйте написать:

expect(item).toEqual(jasmine.any(Boolean));

но получил:

Expected true to equal <jasmine.any(function Boolean() { [native code] })>.

mm.. может быть, я что-то делаю неправильно), или это еще один способ написать тест для значения в этом случае:

if (true или false) - передано, если любое другое - fail

Ответ 1

Я думаю, что вам нужен пользовательский Matcher примерно так:

toBeBoolean : function () {
  return {
    compare : function (actual, expected) {
      return {
        pass : (typeof actual === 'boolean'),
        message : 'Expected ' + actual + ' is not boolean'
      };
    }
  };
}

Как создать пользовательский макет

Ответ 2

Также возможно:

expect(item).toMatch(/true|false/);

Ответ 3

Я ожидаю, что ваш код будет работать так, как ожидалось, но, очевидно, похоже, что жасмин ведет себя немного странно в этом случае.

Я бы порекомендовал вам следующее обходное решение:

expect(typeof item).toEqual('boolean');

Ответ 4

Для меня заметное решение неверно. По крайней мере, не для того, как я ожидаю, что он будет использоваться. Я сделал это так:

jasmine.addMatchers({
    toBeBoolean: function () {
        return {
            compare: function (actual, expected) {
                return {
                    pass: typeof actual === 'boolean',
                    message: 'Expected ' + actual + ' is not boolean'
                };
            }
        };
    }
});

потому что вы не передаете ожидаемое значение, просто фактическое. Таким образом, вы можете использовать это:

expect(true|false).toBeBoolean();