gpt4 book ai didi

unit-testing - 如何为 Kanso 编写单元测试

转载 作者:行者123 更新时间:2023-12-04 02:56:46 25 4
gpt4 key购买 nike

写了很多django应用,习惯了扩展unittest.TestCase并运行 python manage.py test app_name .有没有类似简单的单元测试方法Kanso应用?请提供一个最小的例子。

谢谢。

最佳答案

Kanso 应用程序是 CouchDB 应用程序。然而,最好的选择是暂时忽略 CouchDB。重要的是: Kanso 应用程序是 Node.js 应用程序 .以与测试 Node.js 应用程序相同的方式测试它们。测试他们是否遵守记录在案的 CouchDB API,你会没事的。

理想情况下,我们可能希望在 CouchDB 中实际运行测试。 JavaScript 引擎不同(V8 与 SpiderMonkey);环境不同。然而在实践中,测试 Node.js 代码要容易得多。 (此外,两个平台上都没有一整类 JavaScript 错误:第三方代码设置全局变量、更改内置类型、更改原型(prototype)——这些都是浏览器问题。Node.js 和 CouchDB 都是原始且可预测的。)

例子

让我们制作一个简单的 Couch 应用程序,在 _show function 中输出“Hello world”。 .
kanso.json文件:

{ "name"   : "hello_world"
, "version": "0.1.0"
, "description": "A simple hello-world Couch app"
, "dependencies": { "node-couchapp": "~0.8.3" }
, "app": "app"
}

下一次运行 kanso install这将引入“node-couchapp”依赖项。 (注意使用 kanso 命令与使用 npm 命令的方式相似。)

让我们制作一个非常简单的 Couch 应用程序,在 ./app.js 中:
// A Couch app that just says hello in a _show function.
module.exports = {
'shows': {
'hello': function(doc, req) {
var who = req.query.who || "world"
return "Hello, " + who
}
}
}

我跑了 kanso push http://example.iriscouch.com/so_hello我可以在这里看到我的应用程序:
  • http://example.iriscouch.com/so_hello/_design/hello_world/_show/hello
  • http://example.iriscouch.com/so_hello/_design/hello_world/_show/hello?who=Stack+Overflow

  • 添加测试

    我喜欢 node-tap所以让我们使用它。但重点是,这只是一些 Node.js 代码。使用您喜欢的任何方法对其进行测试。

    首先,快速 package.json文件:
    { "name"   : "hello_world"
    , "description": "A simple hello-world Couch app"
    , "version": "0.1.0"
    , "private": true
    , "devDependencies": { "tap": "~0.2.3" }
    }

    运行 npm install获取 node-tap 包。 (当我使用 Node.js 时,我的 ./node_modules/.bin 中总是有 $PATH。我喜欢在项目中拥有我需要的一切,而不是全局安装。

    接下来,也许是 test/show_function.js文件:
    var tap = require('tap')

    tap.test('The Couch app loads', function(t) {
    t.doesNotThrow(load_app, 'No problem loading the app.js file')
    t.end()

    function load_app() {
    var app = require('../app')
    }
    })

    tap.test('The show function', function(t) {
    var app = require('../app')
    , hello = app.shows.hello

    t.type(hello, 'function', 'Show function "hello" in the couch app')

    var doc = {}
    , null_req = {'query':{}}
    , john_req = {'query':{'who':'John Doe'}}

    t.equal(hello(doc, null_req), 'Hello, world', '"Hello world" by default')
    t.equal(hello(doc, john_req), 'Hello, John Doe', 'Supports ?who query string')
    t.end()
    })

    通过运行 tap test 对其进行测试:
    $ tap test
    ok test/show_function.js ................................ 5/5
    total ................................................... 5/5

    ok

    我将更改代码以返回硬编码的“Hello, world”(即忽略 req.query.who 参数)。注意失败的测试:
    $ tap test
    not ok test/show_function.js ............................ 4/5
    Command: "node" "show_function.js"
    ok 1 No problem loading the app.js file
    ok 2 Show function "hello" in the couch app
    ok 3 "Hello world" by default
    not ok 4 Supports ?who query string
    ---
    file: /private/tmp/j/test/show_function.js
    line: 23
    column: 5
    stack:
    - getCaller (/private/tmp/j/node_modules/tap/lib/tap-assert.js:403:17)
    - assert (/private/tmp/j/node_modules/tap/lib/tap-assert.js:19:16)
    - Function.equal (/private/tmp/j/node_modules/tap/lib/tap-assert.js:160:10)
    - Test._testAssert [as equal] (/private/tmp/j/node_modules/tap/lib/tap-test.js:86:16)
    - Test.<anonymous> (/private/tmp/j/test/show_function.js:23:5)
    - Test.<anonymous> (native)
    - Test.<anonymous> (events.js:88:20)
    - Test.emit (/private/tmp/j/node_modules/tap/lib/tap-test.js:103:8)
    - GlobalHarness.<anonymous> (/private/tmp/j/node_modules/tap/lib/tap-harness.js:86:13)
    - Array.0 (native)
    found: Hello, world
    wanted: Hello, John Doe
    diff: |
    FOUND: Hello, world
    WANTED: Hello, John Doe
    ^ (at position = 7)
    ...
    ok 5 test/show_function.js

    1..5
    # tests 5
    # pass 4
    # fail 1

    total ................................................... 4/5

    not ok

    关于unit-testing - 如何为 Kanso 编写单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8267119/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com