Blog

Blog

PHODAL

RequireJS Jasmine 2.0 编写测试

在谷歌上挣扎了一晚上才发现,原来Jasmine 2.0与Jasmine 1.3在与RequireJS工作的时候方法是不同的。

Jasmine版本与RequireJS

Jasmine 1.3 RequireJS

在Jasmine 1.3中我们的SpecRunner.js可能是这样写的

require([
    'jquery',
    'jasmine-html',
    'spec/index'
], function ($, jasmine, index) {
    var jasmineEnv = jasmine.getEnv();
    var htmlReporter = new jasmine.HtmlReporter(jasmineEnv);

    jasmineEnv.addReporter(htmlReporter);
    jasmineEnv.specFilter = function (spec) {
        return htmlReporter.specFilter(spec);
    };

    $(function() {
        require(index.specs, function() {
            jasmineEnv.execute();
        });
    });
});

Jasmine 2.0 RequireJS

然而在Jasmine2.0中则是提供了一个boot.js所以看上去应该是这样的

var specs = [
    './spec/UserSessionSpec'
];

require(['boot'], function () {
    require(specs, function () {
        window.onload();
    });
});

RequireJS Jasmine 2.0完整示例

我们需要一个SpecRunner.html

<!DOCTYPE HTML>
<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  <title>Jasmine Spec Runner v2.0.3</title>

  <link rel="stylesheet" type="text/css" href="lib/jasmine-2.0.3/jasmine.css">

  <script type="text/javascript" src="../lib/requirejs/require.js" data-main="SpecRunner"></script>
</head>

<body>
</body>
</html>

注意: 里面只包含Jasmine.css,requirejs及其指向的SpecRunner.js

require.config({
    baseUrl: './',
    paths: {
        'text': '../lib/text/text',
        jquery: '../lib/jquery/dist/jquery.min',
        json: '../lib/require/json',
        router: '../router',
        jasmine: './lib/jasmine-2.0.3/jasmine',
        "jasmine-html": './lib/jasmine-2.0.3/jasmine-html',
        boot: './lib/jasmine-2.0.3/boot',
        underscore: '../lib/underscore/underscore',
        mustache: '../lib/mustache/mustache',
        backbone: '../lib/backbone/backbone',
        "jquery-cookie": "../lib/jquery.cookie/jquery.cookie"
    },
    shim: {
        "jquery-cookie": ["jquery"],
        'jasmine': {
            exports: 'window.jasmineRequire'
        },
        'jasmine-html': {
            deps: ['jasmine'],
            exports: 'window.jasmineRequire'
        },
        'boot': {
            deps: ['jasmine', 'jasmine-html'],
            exports: 'window.jasmineRequire'
        },
        underscore: {
            exports: '_'
        }
    }
});

var specs = [
    './spec/UserSessionSpec'
];

require(['boot'], function () {
    require(specs, function () {
        window.onload();
    });
});

上面是require.config的配置,下面则是之前说的boot.js。需要注意的应该是

    jasmine: './lib/jasmine-2.0.3/jasmine',
    "jasmine-html": './lib/jasmine-2.0.3/jasmine-html',
    boot: './lib/jasmine-2.0.3/boot',

以及

    'jasmine': {
        exports: 'window.jasmineRequire'
    },
    'jasmine-html': {
        deps: ['jasmine'],
        exports: 'window.jasmineRequire'
    },
    'boot': {
        deps: ['jasmine', 'jasmine-html'],
        exports: 'window.jasmineRequire'
    },

接着我们就可以简单地写一个测试UserSessionSpec.js

define([
  'jquery',
  '../../js/UserSession'
], function($, UserSession) {
  'use strict';
  describe("User Session", function() {
    it("should return default name,accessToken be null", function() {
      expect(UserSession.defaults.userName).toBe(null);
      expect(UserSession.defaults.accessToken).toBe(null);
    });
  });
});

接着我们就可以愉快地跑我们的Jasmine了

关于我

Github: @phodal     微博:@phodal     知乎:@phodal    

微信公众号(Phodal)

围观我的Github Idea墙, 也许,你会遇到心仪的项目

QQ技术交流群: 321689806
comment

Feeds

RSS / Atom

最近文章

关于作者

Phodal Huang

Engineer, Consultant, Writer, Designer

ThoughtWorks 技术专家

工程师 / 咨询师 / 作家 / 设计学徒

开源深度爱好者

出版有《前端架构:从入门到微前端》、《自己动手设计物联网》、《全栈应用开发:精益实践》

联系我: h@phodal.com

微信公众号: 最新技术分享

标签