Qunit 测试不适用于 visual studio 2012,因为它们适用于浏览器

Qunit tests are not working on visual studio 2012 as they work on browser

我已经使用 knockout 和 breeze 开发了一个 SPA 应用程序,我一直在使用 qunitJS 进行单元测试,它在我的项目的浏览器上运行良好。最近发现了一个VS2012的插件"Chutzpah",可以很好的测试qunit,虽然我用的是breeze,但是可以检查测试用例并响应测试,我的测试用例包括:

  1. 在客户端创建、删除、修改实体

  2. 使用 breeze 控制器将服务器端的更改保存到 SQLServer

这里的问题是当我在 Chutzpah 中测试时 breeze 测试用例失败,因为他们没有获得像(元数据/ ControllerMethods)这样的客户端信息由浏览器通过 Breezeconfig 中定义的 url 调用。我的问题是 我们如何在服务器端 breeze 上执行单元测试 就像真正的单元测试用例一样。 欢迎提出使用新插件或库的建议,这些插件或库实际上可以让我进行 breeze 的单元测试

这是我的测试项目的片段:

 asyncTest("can save nothing", function () {
  expect(1);
  newEm().saveChanges()
      .then(function(saveResult) {
          equal(saveResult.entities.length, 0, 'succeeded in saving nothing');
      })
      .catch(handleFail).finally(start);
});

asyncTest("can save a new Customer entity", function () {
  expect(1);

    // Create and initialize entity to save
    var em = newEm();
    var customer = em.createEntity('Customer', {
        CustomerID: newGuidComb(),
        CompanyName: 'Test1 ' + new Date().toISOString()
    });

    em.saveChanges()
        .then(function (saveResults) {
            ok(!!saveResults.entities[0], ' should have saved new Customer with CustomerID ' +
                customer.getProperty('CustomerID'));
        })
        .catch(handleFail).finally(start);
});

asyncTest("can modify my own Customer entity", function () {
    expect(2);
    var timestamp = new Date().toISOString();
    var em = newEm();

    var customer = em.createEntity('Customer', {
        CustomerID: newGuidComb(),
        CompanyName: "Test2A " + timestamp
    });

    em.saveChanges().then(modifyCustomer).fail(handleSaveFailed).fin(start);

    function modifyCustomer(saveResults) {
        var saved = saveResults.entities[0];
        ok(saved && saved === customer,
            "save of added customer should have succeeded");
        customer.CompanyName("Test2M " + timestamp);
        return em.saveChanges()
        .then(confirmCustomerSaved);
    }

    function confirmCustomerSaved(saveResults) {
        var saved = saveResults.entities[0];
        ok(saved && saved === customer,
            "save of modified customer, '{0}', should have succeeded"
            .format(saved && saved.CompanyName()));
    }

});

简短的回答是设置测试,这样就不需要服务器通信。 Capture the metadata 以便您可以在 运行 测试之前从脚本加载它。 Create mock data 在 Breeze 中,以便您从本地 EntityManager 而不是服务器进行查询。

当然,您应该将应用程序的业务逻辑(需要大量测试的那种)与服务器通信位分开。