【发布时间】:2023-04-06 16:09:01
【问题描述】:
我一直在尝试使用 Intern 作为我们代码库的测试平台,它有很多奇怪之处。我们基本上在 dojoLoader 和核心 dojo 文件之外加载。这意味着我们处于发布过程之外,并且在测试带来的内容方面失去了所有优点。
我承担了开发一个工具链的任务,该工具链将管理代码(linting、build)并最终进行测试。而且我必须掌握单元测试和功能测试的大部分方面,但测试 3rd 方 API 确实让我摸不着头脑。
在阅读文档时,我应该能够使用 Nock 来模拟 api,我尝试了许多不同的示例来获得基本的 hello world 工作,并且我取得了不同程度的成功。
我要注意的是,当您在本地使用 node 时,Nock 似乎玩得很好,但是一旦将 dojo 带入等式,这一切都会崩溃。我尝试过使用axios、get、tdd 和bdd。所有这些似乎都失败了。
我在下面的代码中有一个突破性的时刻,这将使我能够成功地使用 Nock 测试一个模拟 API。
我看到其他示例采用TDD 方法,但是当我使用define 模式时,没有done() 表示异步过程已完成。
虽然下面的内容确实有效,但我觉得我必须跳过很多圈才能达到这一点,即缺少核心节点模块 util.promisify(我目前正在使用 Node V9.10.x 运行)。缺乏对import 等人的支持,这使得采用示例变得非常困难。
我是实习生的新手,我想知道是否有我缺少的首选或标准方法可以使这更简单。老实说,我在视觉上更喜欢 TDD/BDD 模式,但如果以下是我设置的唯一选择,那么我会接受。
define([
'require',
'dojo/node!nock',
'dojo/node!http',
'dojo/node!es6-promisify'
], function (require, nock, http, util) {
const { registerSuite } = intern.getInterface('object');
const { assert } = intern.getPlugin('chai');
const { get } = http;
const { promisify } = util;
const _get = promisify(get);
registerSuite('async demo', {
'async test'() {
const dfd = this.async();
nock('http://some-made-up-service.com')
.get('/request')
.reply(200, {a:'Hello world!'});
http.request({
host:'some-made-up-service.com',
path: '/request',
port: 80
}, function(res){
res.on('data', dfd.callback((data) => {
var toJSON = JSON.parse(data.toString())
assert.strictEqual(toJSON.a, 'Hello world!');
}))
}).end();
}
});
});
我的配置也在这里,我确信文件中有些条目是不必要的,但我现在只是弄清楚什么是有效的。
{
"node": {
"plugins": "node_modules/babel-register/lib/node.js"
},
"loader": {
"script": "dojo",
"options": {
"packages": [
{ "name": "app", "location": "asset/js/app" },
{ "name": "tests", "location": "asset/js/tests" },
{ "name": "dojo", "location": "node_modules/dojo" },
{ "name": "dojox", "location": "node_modules/dojox" },
{ "name": "dijit", "location": "node_modules/dijit" }
],
"map": {
"plugin-babel": "node_modules/systemjs-plugin-babel/plugin-babel.js",
"systemjs-babel-build": "node_modules/systemjs-plugin-babel/systemjs-babel-browser.js"
},
"transpiler": "plugin-babel"
}
},
"filterErrorStack": false,
"suites": [
"./asset/js/common/sudo/tests/all.js"
],
"environments": ["node", "chrome"],
"coverage": "asset/js/common/sudo/dev/**/*.js"
}
【问题讨论】:
标签: node.js ajax dojo intern nock