javascript – 测试微风应用程序

我正在做一个Durandal,微风和淘汰赛的应用程序.我已经开始实施一些测试.我遇到的第一个问题是决定我应该测试什么,不要做什么.我知道我应该测试一切,但在一家小公司并不总是可能的.

我的第二个问题是我如何测试我的电话服务器.我在微风页面上看到一些有关测试的信息.我也看过DocCode的例子.但是,我想了解更多有关我如何做到这一点的意见.

我的问题是:

>我应该在微风通话中测试什么?
>我想测试这个,仿效后端.可能吗?任何例子?
>任何建议或评论都会很棒

解决方法

哇…这是个大问题!

这个问题有一点点in the documentation.几乎不足以确定.

我猜你是JavaScript测试的新手.如果你看到DocCode,你知道我们在这里使用QUnit.许多人喜欢茉莉,摩卡或其他东西;我只能说QUnit.

第一步是学习QUnit.这不难. QUnit’s own intro不错我喜欢Ben Alhman’s slide deck.

接下来我会用你的业务逻辑进行小规模的测试,而不是通过电线.可能是viewmodel中的任何有趣的逻辑,也可能是模型(实体)对象中的一些计算属性.

您可以非常容易地测试虚拟机与“DataContext”的交互,而无需通过电线.创建一个“FakeDataContext”并将其注入到您的测试中,而不是真正的测试.或者,您可以将“monkey patch”真正的“DataContext”在战略地方,将其变成假货.

当伪造DataContext时,我发现利用Breeze将查询限制到本地缓存的能力是有用的.本地缓存用作内存替换,否则将从服务器检索到数据.

这可以像设置经理认QueryOptions的FetchStrategy一样简单,也许就是这样

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',{
       // test values
       CustomerID: testCustomerID,CompanyName: testCustomerName,...
    },breeze.EntityState.Unchanged); // as if fetched from the database

如果我需要相同的测试数据重复,我写一个“数据母亲”填充一个EntityManager与我的测试数据.

我可以做这么多的测试,而不用打服务器.我一直在使用JavaScript中的微风实体,就像生产代码一样.我不必学习一个嘲笑的图书馆或注入另一个工具.

另一种方法 – 更难,更低级别,但更强大 – 是用一个假的代替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日更新

微风将需要元数据来做它的事情.您的元数据来自服务器.调用服务器的元数据似乎打败了运行测试完全断开连接的目的.

如此真实.现在我在这一点上不是一个stickler.我不介意在测试模块的顶部打到服务器的元数据,只是一次…然后运行我的其余测试,而不去服务器进行元数据.但是,如果您是纯粹主义者,或者您不想这样做,您可以将服务器端元数据写入服务器上的JavaScript文件,并将该脚本静态地加载到测试运行器的HTML页面上,就像任何其他脚本一样.

有关此技术的示例,请查看App_Data / WriteMetadataScriptFiles.cs,该文件将在即将(本周稍后)v.1.3.2 DocCode示例中为northwind模型生成JavaScript文件. DocCode测试使用require.js动态加载JavaScript文件. MetadataTests.js测试文件显示如何使用require加载生成northwindMetadata.js.如果你没有使用require.js,那么你不必那么聪明.

自我注意:写一些说明这些技术的样本.

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...