我正在做一个durandal,breeze和knockout的应用程序。我已经开始实施一些测试了。我遇到的第一个问题是决定我应该测试什么,不测试什么。我知道我应该测试一切,但在一个小公司里并不总是可行的。
我的第二个问题是如何测试我对服务器的调用。我在微风页面上看到了一些关于测试的信息。我也见过DocCode示例。但我想知道更多关于如何做到这一点的意见。
我的问题是:
- 我应该在微风电话中测试什么?
- 我想测试一下,模仿后端。可能吗?任何例子?
- 任何建议或评论都会很棒
我正在做一个durandal,breeze和knockout的应用程序。我已经开始实施一些测试了。我遇到的第一个问题是决定我应该测试什么,不测试什么。我知道我应该测试一切,但在一个小公司里并不总是可行的。
我的第二个问题是如何测试我对服务器的调用。我在微风页面上看到了一些关于测试的信息。我也见过DocCode示例。但我想知道更多关于如何做到这一点的意见。
我的问题是:
哇......那是个大问题!
关于这个问题有一点点 在文档中。不足以确定。
我猜你是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。您还可以使用此技巧来模拟服务器端保存行为。
该 DocCode示例 包括一个新的 TestAjaxAdapter
用于模拟我刚刚描述的服务器响应。看看 testAjaxAdapter.js 并看看如何使用它 testAjaxAdapterTests.js。此特定版本的DocCode仅在此版本上 GitHub上 现在,但它将在v.1.3.2之后立即正式发布。
...更新结束;回到原帖...
哇......那是个大问题!
关于这个问题有一点点 在文档中。不足以确定。
我猜你是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。您还可以使用此技巧来模拟服务器端保存行为。
该 DocCode示例 包括一个新的 TestAjaxAdapter
用于模拟我刚刚描述的服务器响应。看看 testAjaxAdapter.js 并看看如何使用它 testAjaxAdapterTests.js。此特定版本的DocCode仅在此版本上 GitHub上 现在,但它将在v.1.3.2之后立即正式发布。
...更新结束;回到原帖...