使用Node.js+;火基

使用Node.js+;火基,node.js,testing,firebase,Node.js,Testing,Firebase,是否存在使用Node.js和Firebase进行正确端到端测试的单一在线示例 我将“适当”定义为: 测试在不同于dev或prod的Firebase实例上运行 测试数据库在每次测试之前都会被清除 Firebase连接是持久性的(即,一旦连接,脚本将永远运行),因此端到端测试Firebase代码非常棘手。答案补充了一些细节。我以两种方式测试了Firebase交互: 在Firebase指向某些测试引用(而不是生产数据)的情况下运行应用程序,并针对其编写一些测试。这种方式更难遵循TDD,因为您将在编写

是否存在使用Node.js和Firebase进行正确端到端测试的单一在线示例

我将“适当”定义为:

  • 测试在不同于dev或prod的Firebase实例上运行
  • 测试数据库在每次测试之前都会被清除

Firebase连接是持久性的(即,一旦连接,脚本将永远运行),因此端到端测试Firebase代码非常棘手。答案补充了一些细节。我以两种方式测试了Firebase交互:

  • 在Firebase指向某些测试引用(而不是生产数据)的情况下运行应用程序,并针对其编写一些测试。这种方式更难遵循TDD,因为您将在编写应用程序后编写这些测试

  • 子进程可能有用,但有黑客行为(请谨慎操作):

  • mock-user.js

    var Firebase = require('firebase');
    var ref = new Firebase('https://<your-app>.firebaseio.com/testUsers');
    
    ref.set({user1: {name: 'Mike'}}, function(err){
        if (err){
            process.exit(1);
        } else{
        ref.child('user1').remove(function(err){
          if (err){
            process.exit(1);
          }
          process.exit(0);
        });
        }
    });
    
    此测试依赖于子进程的退出代码。我不认为这是一个最佳实践,但希望它能告诉你一些问题

    var test = require('tape');
    var exec = require('child_process').exec;
    
    test('firebase', function(t){
      t.plan(1);
      exec('node ./mock-user.js', {timeout: 5000}, function(err, stdout, stderr){
        t.ok(err === null, 'firebase user created and destroyed');
      });
    });