0

是否可以执行位于回调中的测试?例如我有

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();
    });
  });
});

有没有办法做到这一点?否则我有很多问题,包括异步方式的模块

4

2 回答 2

0

我终于解决了这个问题。我将此文件包含在最后一个文件中:

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()

它执行以下操作:

  • 临时禁用业力启动功能,将其替换为空值
  • 获取存储在 a 中的每个测试,为所有测试System.register运行System.import
  • 在所有导入完成后,它附加__karma__start并执行它,运行 Jasmine
于 2015-08-20T20:26:45.020 回答
0

来自:http: //jasmine.github.io/2.0/introduction.html#section-Asynchronous_Support

您应该以同步方式描述测试,在函数中接受done回调it,执行一些异步操作并在完成后调用回调。

茉莉花网站的例子

  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;
    });
  });
});
于 2015-08-20T16:00:27.213 回答