测试
优质
小牛编辑
141浏览
2023-12-01
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。