使用Meteor进行认证测试

时间:2015-04-03 19:34:18

标签: testing meteor mocha velocity

我正在编写需要身份验证的流星测试,并遇到一系列问题。 这是我的代码:

MochaWeb?.testOnly ->
  describe "Login", ->
    describe "security", ->
    it 'should take you to /login/ if you are not logged in', ->
      Meteor.flush()
      chai.assert.equal Router.current().url, '/login/'

    it 'should allow logins and then take us to /', ->
      Meteor.flush()
      Accounts.createUser username: 'test', password: 'test'
      Meteor.loginWithPassword 'test', 'test', (err) ->
        console.log err
        chai.expect(err).to.be undefined
        chai.assert.equal Router.current().url, '/'
  1. 我的测试通过,即使我在提供调用'login'的结果时收到Exception之类的控制台消息:TypeError:object不是函数

  2. 我的console.log调用给了我

    {错误:403,原因:“找不到用户”,详情:未定义,消息:“找不到用户[403]”,错误类型:“Meteor.Error”...}

  3. 控制台上的

    ,速度日志窗口中没有任何内容

    1. 我的用户没有像我期望的那样进行身份验证。一个原因可能是我的应用程序没有帐户密码包,因为我不想要它(我只想让谷歌应用程序用户能够登录)。但是我想要一种简单的方法来处理流星测试中的身份验证,因为我的大多数测试都涉及经过身份验证的用户。
    2. 我不确定断言相等是否会起作用,或者我必须设置某种超时以等待重定向。在这种情况下,它不会是一个问题,但我是否必须嵌套我在loginWithPassword中的每个测试方法?我觉得这有点不舒服。
    3. 非常感谢任何帮助和建议!

      最佳,

2 个答案:

答案 0 :(得分:1)

您确定已经创建了用户吗?我认为你应该在你的fixture.js中创建它。

答案 1 :(得分:0)

MochaWeb.testOnly(function() {
    describe("Client", function() {
        describe("firstTest", function() {
            // Meteor.users.remove({});
            before(function(done) {
                Accounts.createUser(currentUser, function(err, success) {
                    Meteor.loginWithPassword(currentUser, function(err) {
                        console.log("This works");
                        // done(); 
                    });
                });
            });
        });
    });
});

这是源文件,我已经实现了相同的文件 https://github.com/trinisofttechnologies/mocha-test/blob/master/tests/mocha/client/client.coffee

这是代码所在的repo https://github.com/trinisofttechnologies/mocha-test