Жасмин 2.0 SpecRunner против Кармы

Я только начал использовать Jasmine, и я смог отлично использовать SpecRunner из Html. Однако, когда я настроил Карму, я обнаружил несоответствие:

describe('Calculator', function(){
    var obj;
    beforeEach(function(){
        //initialize object
        obj = new Object();

        this.addMatchers({
            toBeFive: function () {
                return {
                    compare: function (actual, expected) {
                        return {
                            pass: actual === 5,
                            message: actual + ' is not exactly 5'
                        }
                    }
                };
            },

Этот фрагмент кода не работает из SpecRunner.html:

 this.addMatchers({

Вместо этого мне пришлось использовать это:

 jasmine.addMatchers({

Это то, что включает specrunner:

 <!-- libs... -->
  <script type="text/javascript" src="lib/jasmine-2.0.0/jasmine.js"></script>
  <script type="text/javascript" src="lib/jasmine-2.0.0/jasmine-html.js"></script>
  <script type="text/javascript" src="lib/jasmine-2.0.0/boot.js"></script>

  <!-- source files here... -->
  <script type="text/javascript" src="../../calculator/calculator.js"></script>

  <!-- test files here... -->
  <script type="text/javascript" src="spec/calculator/calculator-test.js"></script>

Ошибка, которую я получаю:

TypeError: Object #<Object> has no method 'addMatchers'

Обратите внимание, что Karma не вызывает ошибок, но если я использую jasmine.addMatchers({он делает.

Ответы

Ответ 1

Если вы запустите npm install [email protected]~0.2.1 после установки кармы, это будет использовать правильную версию жасмина (карма до сих пор не обновилась, чтобы установить правильную версию по умолчанию, поскольку новый адаптер был выпущен только несколько дней назад)

Ответ 2

Смотрите этот документ https://www.packtpub.com/sites/default/files/downloads/7204OS_The_Future_Jasmine_2_0.pdf

2.0 ломает способ выполнения матчей

Новый синтаксис для создания пользовательских совпадений Jasmine 2.0 поставляется с новым способом создания пользовательских совпадений. Много рефакторинга было выполнено под капюшон, и самое важное изменение заключается в том, что внутренне Жасмин использует эту же инфраструктуру для создания собственных встроенных шаблонов.

Вот новый способ сделать это.

jasmine.Expectation.addMatchers({
    toBeAGoodInvestment: function() {
        return {
            compare: function (actual) {
            var pass = actual.isGood();
            var what = pass ? 'bad' : 'good';
                return {
                    pass: pass,
                    message: 'Expected investment to be a '+ what +' investment'
                };
            }
        };
    }
});

Ответ 3

Я проверил сайт документации Jasmine, и я понимаю, что существуют некоторые важные различия между 1.3 и 2.0, являющиеся одним из тех, которые мы объявляем сотерами:

На основе этой документации (http://jasmine.github.io/2.0/custom_matcher.html) нет ничего плохого:

jasmine.addMatchers({
            toBeFive: function () {
                return {
                    compare: function (actual, expected) {
                        return {
                            pass: actual === 5,
                            message: actual + ' is not exactly 5'
                        }
                    }
                };
            });

Проблема заключается в том, что карма по-прежнему работает жасмин 1.3.1.

Вот как я проверил версию Jasmine, которую я запускал:

  • В моем компьютере node пакеты устанавливаются под (каталог Windows):
  • C:\Users\[UserName]\AppData\Roaming\npm\node_modules\karma-jasmine\lib:
  • открыть jasmine.js
    jasmine.version_ = {
                "major": 1,
                "minor": 3,
                "build": 1,
                "revision": 1354556913
            };

Я обнаружил, что есть усилия по адаптации кармы к работе с Jasmine 2.0.0:

https://github.com/r-park/karma-jasmine2-test