在回调中执行测试
Execute a test inside a callback
是否可以在回调中执行测试?例如我有
System.import("mymodule").then(function(Mymodule) {
describe("Mymodule", function() {
it("does something", function() {
expect(Mymodule.dosomething()).toBeTruthy();
});
});
});
此测试从未运行。简单的 setTimeout
也是如此
var Mymodule = { dosomething: function(){ return true; } };
setTimeout(function() {
describe("Mymodule", function() {
it("does something", function() {
expect(Mymodule.dosomething()).toBeTruthy();
});
});
});
有什么办法吗?否则我有很多问题,包括异步时尚的模块
发件人:http://jasmine.github.io/2.0/introduction.html#section-Asynchronous_Support
您应该以同步方式描述测试,在您的 it
函数中接受 done
回调,执行一些异步操作并在完成后调用回调。
茉莉花网站的例子
describe("long asynchronous specs", function() {
var originalTimeout;
beforeEach(function() {
originalTimeout = jasmine.DEFAULT_TIMEOUT_INTERVAL;
jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;
});
it("takes a long time", function(done) {
setTimeout(function() {
done();
}, 9000);
});
afterEach(function() {
jasmine.DEFAULT_TIMEOUT_INTERVAL = originalTimeout;
});
});
});
我终于解决了这个问题。我将此文件 作为最后一个 :
basePath = "/base/spec/"
modules = []
for own fileName, fileHash of window.__karma__.files
if fileName.indexOf(basePath) is 0
isRunner = fileName.indexOf("spec_runner") >= 0
isRunner ||= fileName.indexOf("spec_helper") >= 0
unless isRunner
moduleName = fileName.replace(basePath, "")
moduleName = moduleName.replace(".js", "")
modules.push(path: fileName, name: moduleName)
mappedModules = {}
baseSpecsPath = "http://localhost:9876"
specModules = []
for module in modules
mappedModules[module.name] = baseSpecsPath + module.path
specModules.push(module.name)
System.config
baseURL: "http://localhost:4567/javascripts/"
map: mappedModules
moduleImports = specModules.map (moduleName) ->
System.import(moduleName)
Promise.all(moduleImports).then ->
window.__karma__.start = window.__lastKarmaStart__
window.__lastKarmaStart__ = null
delete window.__lastKarmaStart__
window.__karma__.start()
它执行以下操作:
- 暂时禁用 karma start 函数,将其替换为空函数
- 获取存储在
System.register
中的每个测试,运行 System.import
用于所有测试
- 所有导入完成后,附加回
__karma__start
并执行,运行ning Jasmine
是否可以在回调中执行测试?例如我有
System.import("mymodule").then(function(Mymodule) {
describe("Mymodule", function() {
it("does something", function() {
expect(Mymodule.dosomething()).toBeTruthy();
});
});
});
此测试从未运行。简单的 setTimeout
var Mymodule = { dosomething: function(){ return true; } };
setTimeout(function() {
describe("Mymodule", function() {
it("does something", function() {
expect(Mymodule.dosomething()).toBeTruthy();
});
});
});
有什么办法吗?否则我有很多问题,包括异步时尚的模块
发件人:http://jasmine.github.io/2.0/introduction.html#section-Asynchronous_Support
您应该以同步方式描述测试,在您的 it
函数中接受 done
回调,执行一些异步操作并在完成后调用回调。
茉莉花网站的例子
describe("long asynchronous specs", function() {
var originalTimeout;
beforeEach(function() {
originalTimeout = jasmine.DEFAULT_TIMEOUT_INTERVAL;
jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;
});
it("takes a long time", function(done) {
setTimeout(function() {
done();
}, 9000);
});
afterEach(function() {
jasmine.DEFAULT_TIMEOUT_INTERVAL = originalTimeout;
});
});
});
我终于解决了这个问题。我将此文件 作为最后一个 :
basePath = "/base/spec/"
modules = []
for own fileName, fileHash of window.__karma__.files
if fileName.indexOf(basePath) is 0
isRunner = fileName.indexOf("spec_runner") >= 0
isRunner ||= fileName.indexOf("spec_helper") >= 0
unless isRunner
moduleName = fileName.replace(basePath, "")
moduleName = moduleName.replace(".js", "")
modules.push(path: fileName, name: moduleName)
mappedModules = {}
baseSpecsPath = "http://localhost:9876"
specModules = []
for module in modules
mappedModules[module.name] = baseSpecsPath + module.path
specModules.push(module.name)
System.config
baseURL: "http://localhost:4567/javascripts/"
map: mappedModules
moduleImports = specModules.map (moduleName) ->
System.import(moduleName)
Promise.all(moduleImports).then ->
window.__karma__.start = window.__lastKarmaStart__
window.__lastKarmaStart__ = null
delete window.__lastKarmaStart__
window.__karma__.start()
它执行以下操作:
- 暂时禁用 karma start 函数,将其替换为空函数
- 获取存储在
System.register
中的每个测试,运行System.import
用于所有测试 - 所有导入完成后,附加回
__karma__start
并执行,运行ning Jasmine