Jasmine (mocha) 嵌套“it”测试
Posted
技术标签:
【中文标题】Jasmine (mocha) 嵌套“it”测试【英文标题】:Jasmine (mocha) nested "it" tests 【发布时间】:2012-07-13 06:29:55 【问题描述】:我试图测试项目的后续创建/删除(在 mongoDB 中通过 mongoose)。
创建的问题是异步的,它在回调函数中返回创建项目的ID,我需要这个ID来删除创建的项目,所以我尝试了下面的mocha代码(以不同的方式)但它没有工作。
describe('Item Model', function()
it('should be able to create item', function(done)
var item = new Item(name: first: "Alex");
item.save(function(err, data)
it('should be able to deleted created item', function(done)
Item.delete(_id: data.id, function(err, data)
done(err);
);
);
)
);
);
这样的测试可以在 mocha 或 jasmine 中实现吗?
【问题讨论】:
【参考方案1】:我遇到过类似的问题,当我尝试嵌套的 describe/it 结构时,它确实有效。
describe('Item Model', () =>
it('should be able to create item', done =>
var item = new Item(name: first: "Alex");
item.save(function(err, data)
describe('Item Delete', () =>
it('should be able to deleted created item', done =>
Item.delete(_id: data.id, function(err, data)
done(err);
);
);
);
);
);
);
【讨论】:
【参考方案2】:我会为此做两个测试。一个是测试插入,一个是测试删除。
在咖啡脚本中应该看起来像这样
describe 'Item model', () ->
item = ''
before (done) ->
item = new Item name: first: "Alex"
done
describe 'When inserting Item', () ->
before (done) ->
item.save done
it 'should have been insterted' ->
#CHECK HERE IT IF IT IS INSERTED
decribe 'when deleting', () ->
before (done) ->
item.save (err,data) ->
return done err if err
Item.delete _id: data.id, done
it 'should have been deleted' ->
#CHECK HERE IT IF IT IS Deleted
【讨论】:
用 CoffeeScript 回答 javascript 问题是一种不好的做法。我确实喜欢 CoffeeScript,但并不是所有的 JS 程序员都能阅读和理解它。 CoffeeScript 不是 JS。正如 ClojureScript 不是 JS 一样。就像 C 不是汇编程序一样。不过这其实是一个jasmine/mocha问题,可以用预处理器语言写jasmine/mocha测试,应该没问题。 我不喜欢这件事,它延续了另一个 xmass 代码树......你的代码有 4 层深......但你只描述了一个嵌套的测试用例......每个人这似乎“还可以”..【参考方案3】:看到这个问题: https://github.com/visionmedia/mocha/issues/438
似乎其目的是强制将测试解耦。虽然不方便并且可能需要更多的模拟,但这种行为很有用,因为它需要的重新测试更少,并且可以更清晰地了解到底发生了什么。
即有 2 个测试,测试 A 和测试 B,其中 B 依赖于 A。
测试 A 中断,因此 B 也中断。您修复了破坏测试 A 的内容,但现在可能会惊讶地发现测试 B 在您的修复过程中或由于不相关的原因而破坏。
当测试不相互依赖时,您可以获得更好的信息和更少的意外。
【讨论】:
以上是关于Jasmine (mocha) 嵌套“it”测试的主要内容,如果未能解决你的问题,请参考以下文章
Karma 与测试框架 Jasmine、Mocha、QUnit [关闭]
javascript 用于邮差测试脚本的mocha / jasmine兼容测试框架(缩小不到1KB)
html 转换器markdown多级列表到jasmine / mocha测试结构http://jsbin.com/qahurad