Jasmine 2.0 SpecRunner vs Karma

时间:2014-01-02 13:48:27

标签: javascript jasmine karma-runner

我刚开始使用Jasmine,我能够使用Html中的SpecRunner就好了。但是当我配置Karma时遇到了一个差异:

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({确实如此。

3 个答案:

答案 0 :(得分:10)

如果你在安装业力后运行npm install karma-jasmine@~0.2.1,这将使用正确的茉莉花版本(由于新适配器仅在几天前发布,因此默认情况下仍未更新karma以安装正确的版本)

答案 1 :(得分:4)

请参阅此文档https://www.packtpub.com/sites/default/files/downloads/7204OS_The_Future_Jasmine_2_0.pdf

2.0打破了我们做匹配的方式

  

创建自定义匹配器的新语法Jasmine 2.0带来了一种新方法   创建自定义匹配器。已经完成了很多重构   引擎盖,最重要的变化是内部的Jasmine   使用相同的基础架构来创建自己的内置匹配器。

这是实现这一目标的新方法。

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'
                };
            }
        };
    }
});

答案 2 :(得分:4)

我检查了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版本的方式:

  • 在我的计算机节点包中安装(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