在谷歌上挣扎了一晚上才发现,原来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了
或许您还需要下面的文章: