问题 测试breeze应用程序


我正在做一个durandal,breeze和knockout的应用程序。我已经开始实施一些测试了。我遇到的第一个问题是决定我应该测试什么,不测试什么。我知道我应该测试一切,但在一个小公司里并不总是可行的。

我的第二个问题是如何测试我对服务器的调用。我在微风页面上看到了一些关于测试的信息。我也见过DocCode示例。但我想知道更多关于如何做到这一点的意见。

我的问题是:

  1. 我应该在微风电话中测试什么?
  2. 我想测试一下,模仿后端。可能吗?任何例子?
  3. 任何建议或评论都会很棒

9913
2018-04-30 10:31


起源



答案:


哇......那是个大问题!

关于这个问题有一点点 在文档中。不足以确定。

我猜你是JavaScript测试的新手。如果你见过 DocCode,你知道我们在这里使用QUnit。许多人更喜欢Jasmine,Mocha或其他东西;我只能和QUnit说话。

第一步是学习 QUnit。这并不难。 QUnit自己的介绍 很好。我喜欢 本·阿尔曼的幻灯片

接下来,我将对您的业务逻辑的小测试进行练习,这些测试不会过时。可能是ViewModel中的任何有趣逻辑,也可能是模型(实体)对象中的某些计算属性。

您可以非常轻松地测试VM与“DataContext”的交互,而无需通过线路。创建一个“FakeDataContext”并将其注入您的测试而不是真实测试。或者你可以“猴子补丁“真正的”DataContext“在战略性的地方把它变成假的。

伪造DataContext时,我发现利用Breeze将查询限制在本地缓存的能力很有用。本地缓存充当数据的内存代理,否则将从服务器检索这些数据。

这可以像设置一样简单 FetchStrategy 经理的默认值 QueryOptions ......也许是这样的

var queryOptions = new QueryOptions({
    mergeStrategy:MergeStrategy.PreserveChanges,
    fetchStrategy:FetchStrategy.FromCache
});

var entityManager = new EntityManager({
    serviceName:“yourEndpoint”,
    queryOptions:queryOptions
});

现在,您的查询将全部定向到缓存(除非它们有明确的 QueryStrategy 他们自己)。

现在通过使用测试数据填充缓存使其变得有用。 DocCode中有许多伪造实体的例子。这是一个伪造客户的例子:

   var testCustomer = manager.createEntity('Customer',{
       //测试值
       CustomerID:testCustomerID,
       CompanyName:testCustomerName,
       ...
    },breeze.EntityState.Unchanged); //就像从数据库中获取一样

如果我需要重复相同的测试数据,我会编写一个“数据母”,为我填充带有测试数据的EntityManager。

我可以通过这种方式进行大量测试,而无需点击服务器。我一直在使用JavaScript中的Breeze实体......就像我在生产代码中一样。我不必学习模拟库或注入其他工具。

另一种方法 - 更难,更低级别,但更强大 - 是取代微风 默认的AJAX适配器 使用假的,返回测试JSON值,就像它们来自服务器一样。您可以使用像Fiddler这样的工具从实际有效负载快照中制作假JSON。您还可以使用此技巧来模拟服务器端保存行为。

2013年5月3日更新

DocCode示例 包括一个新的 TestAjaxAdapter 用于模拟我刚刚描述的服务器响应。看看 testAjaxAdapter.js 并看看如何使用它 testAjaxAdapterTests.js。此特定版本的DocCode仅在此版本上 GitHub上 现在,但它将在v.1.3.2之后立即正式发布。

...更新结束;回到原帖...


16
2018-04-30 20:13



我有一个关于测试查询的问题,在进行第一次查询之前,我需要填充元数据。如何在不调用服务器的情况下模拟它。非常感谢您的回答,这是一个非常好的观点,我的测试。 - jvrdelafuente
见上面的更新!我还没发布这个...但它运行正常。 - Ward
太糟糕了,我们不能喜欢答案...... :) - mikekidder
@mikekidder嗯,你可以投票了:-) - Ward
我成功使用了mockJax库 - github.com/appendto/jquery-mockjax  - 透明地将处理程序附加到指定的URL。无需编写自定义Breeze AJAX适配器,因为mockJax与jQuery AJAX(默认的Breeze AJAX适配器)一起使用 - Adam


答案:


哇......那是个大问题!

关于这个问题有一点点 在文档中。不足以确定。

我猜你是JavaScript测试的新手。如果你见过 DocCode,你知道我们在这里使用QUnit。许多人更喜欢Jasmine,Mocha或其他东西;我只能和QUnit说话。

第一步是学习 QUnit。这并不难。 QUnit自己的介绍 很好。我喜欢 本·阿尔曼的幻灯片

接下来,我将对您的业务逻辑的小测试进行练习,这些测试不会过时。可能是ViewModel中的任何有趣逻辑,也可能是模型(实体)对象中的某些计算属性。

您可以非常轻松地测试VM与“DataContext”的交互,而无需通过线路。创建一个“FakeDataContext”并将其注入您的测试而不是真实测试。或者你可以“猴子补丁“真正的”DataContext“在战略性的地方把它变成假的。

伪造DataContext时,我发现利用Breeze将查询限制在本地缓存的能力很有用。本地缓存充当数据的内存代理,否则将从服务器检索这些数据。

这可以像设置一样简单 FetchStrategy 经理的默认值 QueryOptions ......也许是这样的

var queryOptions = new QueryOptions({
    mergeStrategy:MergeStrategy.PreserveChanges,
    fetchStrategy:FetchStrategy.FromCache
});

var entityManager = new EntityManager({
    serviceName:“yourEndpoint”,
    queryOptions:queryOptions
});

现在,您的查询将全部定向到缓存(除非它们有明确的 QueryStrategy 他们自己)。

现在通过使用测试数据填充缓存使其变得有用。 DocCode中有许多伪造实体的例子。这是一个伪造客户的例子:

   var testCustomer = manager.createEntity('Customer',{
       //测试值
       CustomerID:testCustomerID,
       CompanyName:testCustomerName,
       ...
    },breeze.EntityState.Unchanged); //就像从数据库中获取一样

如果我需要重复相同的测试数据,我会编写一个“数据母”,为我填充带有测试数据的EntityManager。

我可以通过这种方式进行大量测试,而无需点击服务器。我一直在使用JavaScript中的Breeze实体......就像我在生产代码中一样。我不必学习模拟库或注入其他工具。

另一种方法 - 更难,更低级别,但更强大 - 是取代微风 默认的AJAX适配器 使用假的,返回测试JSON值,就像它们来自服务器一样。您可以使用像Fiddler这样的工具从实际有效负载快照中制作假JSON。您还可以使用此技巧来模拟服务器端保存行为。

2013年5月3日更新

DocCode示例 包括一个新的 TestAjaxAdapter 用于模拟我刚刚描述的服务器响应。看看 testAjaxAdapter.js 并看看如何使用它 testAjaxAdapterTests.js。此特定版本的DocCode仅在此版本上 GitHub上 现在,但它将在v.1.3.2之后立即正式发布。

...更新结束;回到原帖...


16
2018-04-30 20:13



我有一个关于测试查询的问题,在进行第一次查询之前,我需要填充元数据。如何在不调用服务器的情况下模拟它。非常感谢您的回答,这是一个非常好的观点,我的测试。 - jvrdelafuente
见上面的更新!我还没发布这个...但它运行正常。 - Ward
太糟糕了,我们不能喜欢答案...... :) - mikekidder
@mikekidder嗯,你可以投票了:-) - Ward
我成功使用了mockJax库 - github.com/appendto/jquery-mockjax  - 透明地将处理程序附加到指定的URL。无需编写自定义Breeze AJAX适配器,因为mockJax与jQuery AJAX(默认的Breeze AJAX适配器)一起使用 - Adam