使用 mocha 对淘汰组件进行单元测试

Unit testing knockout components with mocha

我之前一直在使用 Jasmine 和 Karma 对我的 Knockout 应用程序和组件进行单元测试。由于我不需要这些测试来测试任何 DOM,我正在切换到 Mocha。

我正在测试这样的 Knockout 组件(非常简单):

MyComponent.js:

function MyComponent(params) {
  this.forename = params.forename;
  this.surname = params.surname;
}

exports.MyComponent = MyComponent

ko.components.register('my-component', {
  viewModel: MyComponent,
  template: {
    fromUrl: 'my-component.html'
  }
});

MyComponent.test.js:

var expect = require("expect.js");
var MyComponent = require("./src/components/my-component/my-component");

describe("Should do stuff", function () {
  it("should do stuff, function () {
    var myComponent = new MyComponent({});
    expect(myComponent.forename).to.be(undefined);
  });
});

当我 运行 这个(使用 gulp-mocha)时,我收到一条错误消息说 ko is not defined。现在我很确定我需要在 MyComponent.js 中要求淘汰赛,但我不确定如何。我试过:

var ko = require("ko");
... require("knockout");
... require("knockout.js");
...require("path/to/knockout/knockout");

而且我仍然收到此错误消息。我在这里做错了什么?

你想测试你的组件在有或没有敲除的情况下的工作情况吗?

如果你想测试组件并且它们可以在没有敲除的情况下进行测试,我建议将注册(这是我现在能看到的唯一依赖于敲除的部分)移动到另一个文件并只测试组件本身.

如果您确实需要 knockout 存在,您可能还需要通过 Knockout 依赖于浏览器(我不知道 knockout,所以我不确定这一点)。在那种情况下,您可能 运行 使用业力会更好。 (如果你愿意,你可以用 mocha 代替 jasmine 和 karma)。

或者,您可以使用 sinon 模拟 ko 函数,但这可能只会使它变得更复杂...