问题
我有几个测试在 mocha 中做同样的事情。对我来说,这是重复,当您希望系统可维护时,这是最糟糕的事情。
var exerciseIsPetitionActive = function (expected, dateNow) {
var actual = sut.isPetitionActive(dateNow);
chai.assert.equal(expected, actual);
};
test('test_isPetitionActive_calledWithDateUnderNumSeconds_returnTrue', function () {
exerciseIsPetitionActive(true, new Date('2013-05-21 13:11:34'));
});
test('test_isPetitionActive_calledWithDateGreaterThanNumSeconds_returnFalse', function () {
exerciseIsPetitionActive(false, new Date('2013-05-21 13:12:35'));
});
我需要什么
我需要一种将重复的 mocha 测试折叠成一个的方法。
例如,在 PhpUnit(和其他测试框架)中,您有dataProviders。
在 phpUnit 中,dataProvider 以这种方式工作:
<?php class DataTest extends PHPUnit_Framework_TestCase {
/**
* @dataProvider provider
*/
public function testAdd($a, $b, $c)
{
$this->assertEquals($c, $a + $b);
}
public function provider()
{
return array(
array(0, 0, 0),
array(0, 1, 1),
array(1, 0, 1),
array(1, 1, 3)
);
}
}
这里的provider给测试注入参数,测试执行所有的case。非常适合重复测试。
我想知道在 mocha 中是否有类似的东西,例如,像这样的东西:
var exerciseIsPetitionActive = function (expected, dateNow) {
var actual = sut.isPetitionActive(dateNow);
chai.assert.equal(expected, actual);
};
@usesDataProvider myDataProvider
test('test_isPetitionActive_calledWithParams_returnCorrectAnswer', function (expected, date) {
exerciseIsPetitionActive(expected, date);
});
var myDataProvider = function() {
return {
{true, new Date(..)},
{false, new Date(...)}
};
};
我已经看过的
有一些技术称为Shared Behaviors。但它并没有直接用测试套件解决问题,它只是解决了具有重复测试的不同组件的问题。
问题
你知道在 mocha 中实现 dataProviders 的任何方法吗?