在回调中执行测试

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