TinyTest似乎只关注单元测试;但是,Meteor包可能具有UI元素,并且引入一个预先制作的HTML文件来运行一个小部件会很有帮助。例如,我们可能希望使用DataTables.net将<table>
转换为网格,然后测试实例化是否正确。
如何在TinyTest中使用外部HTML文件?
package.js :
Package.onTest(function (api) {
api.use(packageName, where);
api.use(['tinytest', 'http'], where);
// TODO we should just bring in src/test.html - but how to do that with TinyTest?
api.addFiles('src/test.html', where); // this won't magically display the HTML anywhere
api.addFiles('meteor/test.js', where);
});
test.js :
Tinytest.addAsync('Visual check', function (test, done) {
var iconsDropZone = document.createElement('div');
document.body.appendChild(iconsDropZone);
// TODO ideally we'd get src/test.html straight from this repo, but no idea how to do this from TinyTest
HTTP.get('https://rawgit.com/FortAwesome/Font-Awesome/master/src/test.html', function callback(error, result) {
if (error) {
test.fail('Error getting the icons. Do we have an Internet connection to rawgit.com?');
} else {
iconsDropZone.innerHTML = result.content;
test.ok({message: 'Test passed if the icons look OK.'});
}
done();
});
});
答案 0 :(得分:4)
我个人认为TinyTest不适合这项工作!您可能无法找到如何包含Asset包或编写自己的文件加载器,但您很快就会遇到需要在测试中查询DOM的问题。
以下是我能想到的一些选择:
选项1:
您可以使用xolvio:webdriver访问完全呈现的页面。如果您在onTest
块中包含此软件包,那么您应该可以在您的TinyTest测试中访问wdio。我说应该因为我根本不使用TinyTest,但我设计的webdriver包可以被任何框架使用。按照包自述文件中的说明进行操作,然后执行以下操作:
browser.
init().
url('https://rawgit.com/FortAwesome/Font-Awesome/master/src/test.html').
getSource(function(err, source) {
// you have a fully rendered source here and can compare to what you like
}).
end();
这是一个重量级的选择,但可能适合你。
选项2: 如果您愿意放弃TinyTest,另一种选择是使用Jasmine。它支持client unit测试,因此您可以加载执行视觉效果的单元并通过单元测试将其隔离。
选项3: 您可以围绕包创建一个测试应用程序。所以你会:
/package
/package/src
/package/example
/package/example/main.html
/package/example/tests
/package/example/tests/driver.js
现在示例目录是Meteor应用程序。在main.html中,您将使用您的包并在tests目录下,您可以使用您选择的框架(jasmine / mocha / cucumber)与webdriver结合使用。我喜欢这种用于包开发的模式,因为您可以测试包,因为它旨在供应用程序使用。