Mithril 测试

测试

ospec 测试框架

Mithril 提供了一个名为 ospec 的测试框架。与大多数测试框架不同的是,它没有任何可配置项。

我们来为测试框架添加一个 NPM 脚本。打开项目的 package.json 文件,修改 "script" 中的 test 行:

{
"name": "my-project",
"scripts": {
    "test": "ospec"
}
}

在项目文件夹下创建一个文件夹 tests,在该文件夹内编写测试:

var o = require("mithril/ospec/ospec")

o.spec("math", function() {
o("addition works", function() {
    o(1 + 2).equals(3)
})
})

然后在命令行中执行 npm test 来运行测试。Ospec 会把项目中所有 tests 文件夹内的文件都当成测试文件。

良好的测试实践

一般来说,有两种方法来编写测试:预先编写测试和事后编写测试。

预先编写测试可以预先定义 API 需要遵守的规范。但是如果你还不知道你的项目会是什么样子,或者 API 可能会发生变动,那么预先编写测试可能不合适。

事后编写测试可以测试已有 API 是否符合规范,以及是否存在 bug,确保之前修复的 bug 不会被后面的修改重新引入。

单元测试

单元测试是指对应用中最小可测试单元进行测试,给定一些输入,并测试它的输出。

测试 Mithril 的组件很简单。假设有一个这样的组件:

var m = require("mithril")

module.exports = {
view: function() {
    return m("div", "Hello world")
}
}

然后为此组件编写测试,首先创建一个测试文件 tests/MyComponent.js

var MyComponent = require("MyComponent")

o.spec("MyComponent", function() {
o("returns a div", function() {
    var vnode = MyComponent.view()

    o(vnode.tag).equals("div")
    o(vnode.children.length).equals(1)
    o(vnode.children[0].tag).equals("#")
    o(vnode.children[0].children).equals("Hello world")
})
})

通常,你不会如此细致的测试 vnode 树的结构,而只会测试视图的重要的动态部分。可以使用 Mithril Query 工具来帮助测试 vnode 树。

有时需要模拟模块的依赖关系,可以使用 Mockery