Javascript 测试微风应用
我正在用durandal、breeze和knockout做一个应用程序。我已经开始实施一些测试。我遇到的第一个问题是决定我应该测试什么和不应该测试什么。我知道我应该测试一切,但在一个小公司里,这并不总是可能的 我的第二个问题是如何测试对服务器的调用。我在breeze页面上看到了一些关于测试的信息。我还看到了DocCode示例。但我想知道更多关于如何做到这一点的意见 我的问题是:Javascript 测试微风应用,javascript,testing,jasmine,breeze,durandal,Javascript,Testing,Jasmine,Breeze,Durandal,我正在用durandal、breeze和knockout做一个应用程序。我已经开始实施一些测试。我遇到的第一个问题是决定我应该测试什么和不应该测试什么。我知道我应该测试一切,但在一个小公司里,这并不总是可能的 我的第二个问题是如何测试对服务器的调用。我在breeze页面上看到了一些关于测试的信息。我还看到了DocCode示例。但我想知道更多关于如何做到这一点的意见 我的问题是: 我应该在微风中测试什么 我想测试一下,模拟后端。可能吗?有什么例子吗 任何建议或评论都会很好 哇。。。这是个大问题 关
哇。。。这是个大问题 关于这个问题有一点争议。还不足以确定 我猜您对JavaScript测试相当陌生。如果你看到了,你知道我们在这附近用QUnit。许多人喜欢茉莉花、摩卡咖啡或其他东西;我只能和昆特说话 第一步是学习。这并不难。这很好。我喜欢 接下来,我将对您的业务逻辑进行一些小测试,这些测试不会出现问题。可以是ViewModel中任何有趣的逻辑,也可以是模型(实体)对象中的某些计算属性 您可以非常轻松地测试VM与“DataContext”的交互,而无需进行连线。创建一个“FakeDataContext”,并将其注入到您的测试中,而不是真正的测试中。或者,您可以在战略位置“真实的”数据上下文,将其变成假的 在伪造DataContext时,我发现利用Breeze将查询限制在本地缓存中的能力非常有用。本地缓存作为内存中的代理,用于从服务器检索数据 这可以很简单,只需设置管理器默认的
查询选项的FetchStrategy
。。。也许是这样
var queryOptions = new QueryOptions({
mergeStrategy: MergeStrategy.PreserveChanges,
fetchStrategy: FetchStrategy.FromCache
});
var entityManager = new EntityManager({
serviceName: "yourEndpoint",
queryOptions: queryOptions
});
如果我反复需要相同的测试数据,我会编写一个“数据母亲”,用测试数据填充EntityManager
我可以用这种方式做很多测试,而不需要点击服务器。我一直在用JavaScript处理Breeze实体。。。就像我在生产代码中所做的那样。我不必学习模仿库或注入其他工具
另一种方法——更难,级别更低,但功能更强大——是用一个伪代码代替Breeze,该代码返回测试JSON值,就像它们来自服务器一样。您可以使用像Fiddler这样的工具从实际负载快照中生成假JSON。您还可以使用此技巧模拟服务器端保存行为
2013年5月3日更新
包括一个新的TestAjaxAdapter
,用于模拟我刚才描述的服务器响应。查看testAjaxAdapter.js,并了解如何在testAjaxAdapterTests.js中使用它。DocCode的这个特定版本现在才启用,但它将在v.1.3.2之后立即正式发布
。。。更新结束;返回原始帖子…
在假冒的AJAX适配器中伪造JSON流是否看起来太像PITA了?
拿出你的疯狂微风技能,写一篇文章来创造那些假货。让您的伪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,就不必那么聪明
self注意:编写一些示例来说明这些技术。我有一个关于测试查询的问题,在执行第一个查询之前,我需要先检查元数据。我如何在不调用服务器的情况下模拟它。非常感谢你的回答,这是一个非常好的点来启动我的测试。请参阅上面的更新!我还没有发布这个。。。但效果很好。可惜我们不能找到答案……:)我已经成功地使用mockJax库——将处理程序透明地附加到指定的URL。无需编写自定义的BreezeAJAX适配器,因为mockJax与jQuery AJAX(默认的BreezeAJAX适配器)一起工作
var testCustomer = manager.createEntity('Customer', {
// test values
CustomerID: testCustomerID,
CompanyName: testCustomerName,
...
}, breeze.EntityState.Unchanged); // as if fetched from the database