继续阅读以了解有关Yeoman添加的测试助手的更多信息,以减轻单元测试生成器的痛苦。
以下示例假设您在BDD模式下使用Mocha。全局概念应该很容易应用于您选择的单元测试框架
组织你的测试
保持测试简单易于编辑非常重要。
通常,组织测试的最佳方法是将每个生成器和子生成器分隔为自己的describe
块。然后,describe为您的生成器接受的每个选项添加一个块。然后,it为每个断言(或相关断言)使用一个块。
在代码中,您应该得到类似于此的结构:
1 | describe('backbone:app', function () { |
测试助手
Yeoman提供测试助手方法。它们包含在yeoman-test包装内。
1 | var helpers = require('yeoman-test'); |
您可以在此处查看完整的帮助程序API。
单元测试生成器时最有用的方法是helpers.run()。此方法将返回一个RunContext实例,您可以在该实例上调用方法来设置目录,模拟提示,模拟参数等。
1 | var path = require('path'); |
有时您可能希望为生成器构建一个测试场景,以便与目标目录中的现有内容一起运行。在这种情况下,您可以inTmpDir()
使用回调函数调用,如下所示:
1 | var path = require('path'); |
您还可以在回调中执行异步任务:
1 | var path = require('path'); |
运行Promise将解析运行生成器的目录。如果要使用运行生成器的临时目录,这将非常有用:
1 | helpers.run(path.join(__dirname, '../app')) |
如果您的生成器调用composeWith(),您可能想要模拟那些依赖生成器。使用#withGenerators(),传递#createDummyGenerator()用作第一项的数组数组和模拟生成器的命名空间作为第二项:
1 | var deps = [ |
如果你不喜欢Promise,你可以使用’ready’,’error’以及’end’事件发出:
1 | helpers.run(path.join(__dirname, '../app')) |
您还可以运行将其作为模块导入的生成器。如果生成了生成器的源代码,这将非常有用。
您需要提供以下设置run:
- resolved:生成器的路径,例如 ../src/app/index.js
- namespace:生成器的命名空间,例如 mygenerator:app
1 | var MyGenerator = require('../src/app'); |
断言助手
Yeoman 使用生成器相关的断言助手扩展了本机断言模块。您可以在yeoman-assert存储库中看到断言助手的完整列表。
需要断言助手:
1 | var assert = require('yeoman-assert'); |
存在文件断言
1 | assert.file(['Gruntfile.js', 'app/router.js', 'app/views/main.js']); |
assert.noFile()
断言相反。
断言文件内容
1 | assert.fileContent('controllers/user.js', /App\.UserController = Ember\.ObjectController\.extend/); |
assert.noFileContent()
断言相反。