2

我尝试编写一个将记录插入 mongodb 的应用程序。
先看看我的测试:

test('Password test failed, not strong enough.', () {

    Account.create({'name': 'eric', 'email': 'koston@mail.com', 'password': 'Test'})
        .catchError((err) {
            expect(err, throwsA(new isInstanceOf<DuplicateError>()));
        });
});

这个测试应该失败,因为密码不够强。以及尝试插入记录的代码。

static Future<String> create(Map account) {

var completer = new Completer();
String hashed_password;
var self = new Account();

if(self._signUpKeys.length != account.length) {
    return completer.completeError(new LengthError(I18n.instance.getTextByMap('TEXT1')));
}

for(var singUpKey in self._signUpKeys) {

    if (!account.containsKey(singUpKey)) {

        return completer.completeError(new ArgumentError(I18n.instance.getTextByMap('TEXT1')));
    }
}

// Try to find duplication
Future.wait([findAccountByField('name', account['name']),
             findAccountByField('email', account['email'])])
    .then((Iterable<Map<String, String>> lists) { 

        // Check of any duplications
        lists.forEach((value){
            value.forEach((String key, String value) {
                switch(key) {
                    case('name'):
                        return completer.completeError(new DuplicateError(
                                I18n.instance.getTextWithMarker('TEXT2', {'&1': value})));
                    case('email'):
                        return completer.completeError(new DuplicateError(
                                I18n.instance.getTextWithMarker('TEXT3', {'&1': value})));
                }

            });

            hashed_password =  Account.generateHashPassword(account['password']);
            self._insert(self._fillDbFields(name: account['name'], email: account['email'], hashed_password: hashed_password,
                                            created_at: new DateTime.now(), activated: false))
                .then((result) => completer.complete(result));
        });
    })
    .catchError((err) {
        completer.completeError(err);
    });

return completer.future;

}

这种分配会抛出错误,因为密码不符合安全要求。

hashed_password =  Account.generateHashPassword(account['password']);

这部分应该捕获错误并完成它。

    .catchError((err) {
        completer.completeError(err);
    });

但在测试中,我得到了 NoSuchMethodError。为什么在这里,错误对象没有传递给测试?我在这里做错了什么?在此处输入图像描述

4

1 回答 1

2

我认为您应该检查此处的值列表

Future.wait([findAccountByField('name', account['name']),
             findAccountByField('email', account['email'])])
    .then((Iterable<Map<String, String>> lists) { 

如果是null你不能调用forEach

于 2014-07-01T07:01:07.313 回答