Javascript 我使用vows.js子主题有什么问题?

Javascript 我使用vows.js子主题有什么问题?,javascript,node.js,bdd,vows,Javascript,Node.js,Bdd,Vows,出于某种原因,我似乎无法在我真正的测试套件中使用vows.js子主题,但它们在示例文件中运行良好。。。你能发现我的问题吗 这项工作: vows.describe('An Education in Vows').addBatch({ 'when I write an asynchronous topic': { topic: function() { var that = this; setTimeout(function()

出于某种原因,我似乎无法在我真正的测试套件中使用vows.js子主题,但它们在示例文件中运行良好。。。你能发现我的问题吗

这项工作:

vows.describe('An Education in Vows').addBatch({
    'when I write an asynchronous topic': {
        topic: function() {
            var that = this;
            setTimeout(function() {
                that.callback(true);
            }, 100);
        },
        'it passes': function (topic) {
            assert.equal(topic, true);
        },
        'and it has an asynchronous sub-topic': {
            topic: function() {
                var that = this;
                setTimeout(function() {
                    that.callback(true);
                }, 100);
            },
            'it also passes': function (topic) {
                assert.equal(topic, true);
            }
        }
    }
}).run();
当我通过以下方式运行此功能时:

node tests/learning-vows.js
node tests/smoke.js
我得到:

·
·
✓ OK » 2 honored (0.207s)
·
✗ Errored » 1 honored ∙ 1 errored
这不起作用:

我有一个文件。/tests/smoke.js

vows.describe('Registration & Authentication').addBatch({
    'when a user registers with a valid username and password': {
        topic: function () {
            client.register({
                username: validusername,
                password: validpassword
            }, this.callback);
        },
        'we return status 200 OK': function (data, response) {
            assert.equal(200, response.statusCode);
        },
        'simple sub-topic': {
            topic: true,
            'should work': function(topic) {
                assert.equal(true, topic);
            }
        },
    }
}).run()
当我通过以下方式执行此操作时:

node tests/learning-vows.js
node tests/smoke.js
我得到:

·
·
✓ OK » 2 honored (0.207s)
·
✗ Errored » 1 honored ∙ 1 errored
请注意,在第二个示例中,没有子主题,我得到:

·
✓ OK » 1 honored (0.100s)

Vows对回调使用节点的约定(请参见:),它假定回调上的第一个参数是错误对象

因此,当您将
数据
作为第一个参数发送时,您的通知保证在
客户端中发生了错误。注册
。它阻止誓言评估子主题。子主题标记为errored,但断言成功,当前主题标记为Louded

从输出中猜测这一点真的不容易。此外,誓言行为不一致,请尝试将
true
替换为
0
,然后在第一次测试中将
'0'
替换为回调参数,您将看到另外两个结果

以下是一个工作示例:

var-vows=require('vows')、assert=require('assert');
变量客户端={
寄存器:函数(obj,回调){
回调(null,obj,{statusCode:200});
}
};
誓言。描述(‘注册和认证’)。addBatch({
“当用户使用有效的用户名和密码注册时”:{
主题:函数(){
client.register({
用户名:“validusername”,
密码:“validpassword”
},这是回调);
},
“我们返回状态200 OK”:函数(错误、数据、响应){
assert.equal(response.statusCode,200);
},
“简单子主题”:{
题目:对,,
“应该工作”:函数(主题){
assert.equal(true,topic);
}
}
}
}).导出(模块)

您是否尝试过并
console.log
您的上一个
断言.equal
作为主题测试了什么?如果您没有
topic:true,
而是
topic:function(){return true;}