我想写JS测试.生产代码使用RequireJS编写.我找到了一个名为Squire.js的测试库:https://github.com/iammerrick/Squire.js/
来自Squire.js网站
Run生成一个函数,该函数将接收完成回调并在测试功能完成后执行它.对于使用回调处理异步的框架特别有用.这是Mocha.js的一个例子.Jasmine可以使用Jasmin.Async提供这种回调方法."
我不知道如何使用Jasmine async.一个小例子非常有用.
我正在使用Karma,Jasmine,Jasmine.Async,Sinon和Chai.
好消息......这个测试工作正常.依赖被嘲笑,间谍被调用,故意破坏测试对象导致测试失败.
define(['chai', 'squire'], function (chai, Squire) {
var should = chai.should(),
async = new AsyncSpec(this),
subject, injector = new Squire();
describe('EventsView', function () {
describe('when an event is clicked', function () {
var mockModel, stub;
async.beforeEach(function (done) {
setFixtures('<div id="screen"></div>');
mockModel = {
toJSON: function () {
return {
dimensions: "hu1 vu2",
events: [{
date: "8/29/2013",
id: "8923",
title: "Fancy Show",
venue: "Lovely venue",
}, {
date: "8/29/2013",
id: "9034",
title: "Exciting Game",
venue: "Lovely stadium"
}],
id: 3566, …
Run Code Online (Sandbox Code Playgroud) 我正在尝试将Squire.js作为RequireJS的依赖加载器.使用完全正常的Web浏览器运行单元测试.我想用来store
处理我的嘲笑.但无法阻止Squire加载实际模块.
mock
工作良好:
define(['lib/squire'], function (squire) {
var injector = new squire();
injector
.mock('modules/dependency', {
run: function () {
console.log("fake dependency run");
}
})
.require(['modules/module-under-test'], function (module) {
module.run();
});
});
Run Code Online (Sandbox Code Playgroud)
控制台输出
module under test loaded module-under-test.js:2
module under test run module-under-test.js:5
fake module run module-test.js:8
Run Code Online (Sandbox Code Playgroud)
但是当我这样使用时store
:
define(['lib/squire'], function (squire) {
var injector = new squire();
injector
.store('modules/dependency')
.require(['modules/module-under-test', 'mocks'], function (module, mocks) {
mocks.store["modules/dependency"] = {
run: function () {
console.log("fake dependency run");
}
}; …
Run Code Online (Sandbox Code Playgroud) 我们正在使用Karma和Mocha以及Squire来模拟使用RequireJs加载的依赖项.没有Squire,我们的测试运行正常,但是一旦我们初始化Squire对象,一切都开始破坏:
define(['squire'], function (Squire) {
var injector = new Squire(); // comment this out and everything works again
});
Run Code Online (Sandbox Code Playgroud)
我们发现,有时Karma报告没有运行任何测试(即使测试函数内部设置的断点会被击中),有时它会报告不应该失败的随机错误.卡玛只是有点疯狂.
如果没有我的测试疯狂,我如何使用Squire?
I am trying to use RequireJS in node, and found difficulties with path issues.
Here is a simple foo method that returns "foo"
$ cat src/foo.js
define([], function() {
var foo = function() {
return "foo";
};
return { foo:foo};
});
Run Code Online (Sandbox Code Playgroud)
Here is bar that requires foo, but it works only when specifying relative path. Is that how it's supposed to be?
$ cat src/bar.js
define(['./foo.js'], function(foo) {
var bar = function() {
return foo.foo().replace("foo","bar");
};
return { bar : …
Run Code Online (Sandbox Code Playgroud) requirejs ×5
squirejs ×5
javascript ×2
karma-runner ×2
jasmine ×1
mocha.js ×1
mocking ×1
node.js ×1
unit-testing ×1