哇...这是个大问题!
in the documentation 有一些关于这个主题的内容。还不足以确定。
我猜您是 JavaScript 测试的新手。如果你看过DocCode,你就会知道我们在这里使用QUnit。许多人更喜欢茉莉、摩卡或其他东西;我只能和 QUnit 说话。
第一步是学习QUnit。这并不难。 QUnit's own intro 很好。我喜欢Ben Alhman's slide deck。
接下来,我将对您的业务逻辑进行小型测试,这些测试不会通过网络进行。可以是 ViewModel 中任何有趣的逻辑,也可以是模型(实体)对象中的某些计算属性。
您可以很容易地测试 VM 与“DataContext”的交互,而无需通过网络。创建一个“FakeDataContext”并将其注入您的测试而不是真实的。或者,您可以在战略位置“monkey patch”真正的“DataContext”,将其变成假货。
在伪造 DataContext 时,我发现利用 Breeze 将查询限制到本地缓存的能力很有用。本地缓存充当内存中的代理项,以替代本来可以从服务器检索到的数据。
这可以像设置经理默认的QueryOptions 的FetchStrategy 一样简单......也许像这样
var queryOptions = new QueryOptions({
合并策略:合并策略.PreserveChanges,
fetchStrategy:FetchStrategy.FromCache
});
var entityManager = 新的EntityManager({
服务名称:“你的端点”,
查询选项:查询选项
});
现在您的查询将全部被定向到缓存(除非它们有自己的显式 QueryStrategy)。
现在通过使用测试数据填充缓存使其变得有用。 DocCode 中有许多伪造实体的示例。以下是伪造客户的示例:
var testCustomer = manager.createEntity('客户', {
// 测试值
客户 ID:testCustomerID,
公司名称:testCustomerName,
...
}, 微风.EntityState.Unchanged); // 就像从数据库中获取一样
如果我重复需要相同的测试数据,我会编写一个“Data Mother”,它会为我的 EntityManager 填充测试数据。
我可以通过这种方式进行大量测试,而无需访问服务器。我一直在用 JavaScript 处理 Breeze 实体……就像我在生产代码中所做的一样。我不必学习模拟库或注入其他工具。
另一种方法 - 更难,更低级别,但更强大 - 将 Breeze default AJAX adapter 替换为返回测试 JSON 值的假冒,就好像它们来自服务器一样。您可以使用 Fiddler 之类的工具从实际有效负载快照中制作假 JSON。您还可以使用此技巧来模拟服务器端保存行为。
2013 年 5 月 3 日更新
DocCode Sample 包含一个新的TestAjaxAdapter,用于模拟我刚才描述的服务器响应。查看 testAjaxAdapter.js 并了解如何在 testAjaxAdapterTests.js 中使用它。此特定版本的 DocCode 目前仅在 GitHub 上发布,但将在 v.1.3.2 之后的版本中正式发布。
...更新结束;返回原帖...
在你的假 AJAX 适配器中伪造 JSON 流是否看起来太像 PITA?
打破你疯狂的微风技能并写一个custom JsonResultsAdapter来制造那些假货。让您的假 AJAX 适配器为每个查询请求返回一个空数组。然后你可以在你的JsonResultsAdapter 的extractData 和visitNode 方法中做任何你想做的事情。
我相信很明显你也可以伪造你的服务器端控制器。当然,您的测试仍然会“通过电线”到达该控制器。
希望这些线索足以让你朝着满意的方向前进。
2013 年 4 月 30 日更新
Breeze 需要元数据来完成它的工作。您的元数据来自服务器。调用服务器获取元数据似乎违背了完全断开运行测试的目的。
确实如此。现在我在这一点上不是一个坚持者。我不介意在测试模块的顶部点击服务器获取元数据......恰好一次......然后运行我的其余测试而不去服务器获取元数据。但是,如果您是一个纯粹主义者或者您只是不想这样做,您可以将服务器端元数据写入服务器上的 JavaScript 文件,然后像任何其他脚本一样将该脚本静态加载到您的测试运行程序的 HTML 页面上。
有关此技术的示例,请查看App_Data/WriteMetadataScriptFiles.cs,它为即将发布的(本周晚些时候)v.1.3.2 DocCode 示例中的 Northwind 模型生成 JavaScript 文件。 DocCode 测试使用 require.js 动态加载 JavaScript 文件。 metadataTests.js 测试文件显示了如何使用 require 加载生成的 northwindMetadata.js。如果你不使用 require.js,你不必那么聪明。
自我说明:写一些示例来说明这些技术。