Javascript 测试微风应用

Javascript 测试微风应用,javascript,testing,jasmine,breeze,durandal,Javascript,Testing,Jasmine,Breeze,Durandal,我正在用durandal、breeze和knockout做一个应用程序。我已经开始实施一些测试。我遇到的第一个问题是决定我应该测试什么和不应该测试什么。我知道我应该测试一切,但在一个小公司里,这并不总是可能的 我的第二个问题是如何测试对服务器的调用。我在breeze页面上看到了一些关于测试的信息。我还看到了DocCode示例。但我想知道更多关于如何做到这一点的意见 我的问题是: 我应该在微风中测试什么 我想测试一下,模拟后端。可能吗?有什么例子吗 任何建议或评论都会很好 哇。。。这是个大问题 关

我正在用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