RequireJS 和摩卡
RequireJS and Mocha
我有一个使用 RequireJS 的网络应用程序。这是我的 js/main.js
文件:
require.config({
baseUrl: 'js/',
paths: {
jquery: 'libs/jquery/jquery',
lodash: 'libs/lodash/lodash',
backbone: 'libs/backbone/backbone',
// [other dependencies...]
}
});
require(['views/AppView'], function (AppView) {
var app_view = new AppView;
});
这是我的 js/views/AppView.js
文件:
define([
'jquery',
'underscore',
'backbone',
'joint',
'views/ProjectView',
'models/Command',
'views/detailsview',
'views/newcellview'
], function ($, _, Backbone, joint, ProjectView, Command, DetailsView, NewCellView) {
var app_view = {stub: 'stub'};
return app_view;
});
最后这是我的 AppViewTest.js
文件,我 运行 和 mocha js/test/AppViewTest.js
:
var assert = require('assert');
var requirejs = require('requirejs');
describe('AppView', function() {
var app_view;
beforeEach(function (done) {
requirejs(['../views/AppView.js'], function (AppView) {
app_view = new AppView;
});
});
it('should be [...]', function() {
assert.equal(app_view, ...);
});
});
我收到以下错误:
1) AppView views "before each" hook:
Uncaught Tried loading "jquery" at /usr/local/lib/node_modules/mocha/bin/jquery.js then tried node's require("jquery") and it failed with error: Error: Cannot find module 'jquery'
你开始你的测试:
var assert = require('assert');
var requirejs = require('requirejs');
然后你开始调用 requirejs
但这里没有任何配置 RequireJS 的东西。
如果您将 main.js
中的 require.config
调用剪切并粘贴到您的测试文件中,这将配置您的测试以加载与常规应用程序中相同的文件。
另一种方法是:
before(function (done) {
requirejs(['full-path-to/main'], function () {
requirejs(['../views/AppView'], function (AppView) {
app_view = new AppView;
done();
});
});
});
重点是在加载 AppView
之前加载您的配置。另请注意,您需要调用 done
,我已将 beforeEach
更改为 before
,因为无需在每次测试前重新加载它。 (之前我诱导你使用 beforeEach
时,我的想法是错误的。我的错。)
我还从您的 requirejs
调用中删除了 .js
,因为您不应该使用 .js
。有时它是必要的,但除非你能解释 为什么 你需要它,否则你不应该使用它。
我有一个使用 RequireJS 的网络应用程序。这是我的 js/main.js
文件:
require.config({
baseUrl: 'js/',
paths: {
jquery: 'libs/jquery/jquery',
lodash: 'libs/lodash/lodash',
backbone: 'libs/backbone/backbone',
// [other dependencies...]
}
});
require(['views/AppView'], function (AppView) {
var app_view = new AppView;
});
这是我的 js/views/AppView.js
文件:
define([
'jquery',
'underscore',
'backbone',
'joint',
'views/ProjectView',
'models/Command',
'views/detailsview',
'views/newcellview'
], function ($, _, Backbone, joint, ProjectView, Command, DetailsView, NewCellView) {
var app_view = {stub: 'stub'};
return app_view;
});
最后这是我的 AppViewTest.js
文件,我 运行 和 mocha js/test/AppViewTest.js
:
var assert = require('assert');
var requirejs = require('requirejs');
describe('AppView', function() {
var app_view;
beforeEach(function (done) {
requirejs(['../views/AppView.js'], function (AppView) {
app_view = new AppView;
});
});
it('should be [...]', function() {
assert.equal(app_view, ...);
});
});
我收到以下错误:
1) AppView views "before each" hook:
Uncaught Tried loading "jquery" at /usr/local/lib/node_modules/mocha/bin/jquery.js then tried node's require("jquery") and it failed with error: Error: Cannot find module 'jquery'
你开始你的测试:
var assert = require('assert');
var requirejs = require('requirejs');
然后你开始调用 requirejs
但这里没有任何配置 RequireJS 的东西。
如果您将 main.js
中的 require.config
调用剪切并粘贴到您的测试文件中,这将配置您的测试以加载与常规应用程序中相同的文件。
另一种方法是:
before(function (done) {
requirejs(['full-path-to/main'], function () {
requirejs(['../views/AppView'], function (AppView) {
app_view = new AppView;
done();
});
});
});
重点是在加载 AppView
之前加载您的配置。另请注意,您需要调用 done
,我已将 beforeEach
更改为 before
,因为无需在每次测试前重新加载它。 (之前我诱导你使用 beforeEach
时,我的想法是错误的。我的错。)
我还从您的 requirejs
调用中删除了 .js
,因为您不应该使用 .js
。有时它是必要的,但除非你能解释 为什么 你需要它,否则你不应该使用它。