最近我开始使用JS和mocha。
我已经编写了一些测试,但现在我已经到了需要重用已经编写的测试的时候了。
我已经厌倦了寻找“它”/“描述”重用,但没有找到有用的东西......
有没有人有一些好的例子?
由于
答案 0 :(得分:8)
考虑到如果您仅进行单元测试,则不会因组件之间的集成问题而发现错误,您可能会在某些时候一起测试组件。转储摩卡来运行这些测试将是一种耻辱。因此,您可能希望使用mocha进行一系列测试,这些测试遵循相同的一般模式,但在某些小方面有所不同。
我发现这个问题的方法是动态创建我的测试函数。它看起来像这样:
describe("foo", function () {
function makeTest(paramA, paramB, ...) {
return function () {
// perform the test on the basis of paramA, paramB, ...
};
}
it("test that foo does bar", makeTest("foo_bar.txt", "foo_bar_expected.txt", ...));
it("test what when baz, then toto", makeTest("when_baz_toto.txt", "totoplex.txt", ...));
[...]
});
您可以看到一个真实的例子here。
请注意,没有什么会迫使您将makeTest函数置于describe
范围内。如果您认为某种测试足够通用,可以将其用于其他人,那么您可以将其放在模块中require
。
答案 1 :(得分:0)
考虑到每个测试仅用于测试单个功能/单元,通常您希望避免重复使用测试。最好保持每个测试自包含,以最小化测试的依赖性。
也就是说,如果您在测试中经常重复某些内容,可以使用beforeEach
来保持简洁
describe("Something", function() {
// declare your reusable var
var something;
// this gets called before each test
beforeEach(function() {
something = new Something();
});
// use the reusable var in each test
it("should say hello", function() {
var msg = something.hello();
assert.equal(msg, "hello");
});
// use it again here...
it("should say bye", function() {
var msg = something.bye();
assert.equal(msg, "bye");
});
});
您甚至可以使用异步beforeEach
beforeEach(function(done) {
something = new Something();
// function that takes a while
something.init(123, done);
});