2013-12-03 1 views
2

Я задаюсь вопросом, почему пытается запустить следующий набор тестов терпит неудачу при попытке удалить таблицу я хранимую объекты в. Ошибки я получаю следующееПочему создается и удаляется таблица Azure?

1) Azure Storage cloud storage operations "after all" hook: Error: The specified resource does not exist. RequestId:3745d709-fa5e-4a2b-b517-89edad3efdd2 Time:2013-12-03T22:26:39.5532356Z

Если я закомментировать фактическую вставку данных он терпит неудачу в другой раз, и если я пытаюсь выполнить вложение данных, он терпит неудачу каждый раз с дополнительным «указанная таблица не существует».

Для первого случая это, по-видимому, указывает на то, что в создании таблицы существует какая-то задержка, поэтому в каждом другом тесте она успешна, а для второго случая она, по-видимому, указывает на то, что хотя мои обратные вызовы вызываются после создания таблицы таблица (таблицы) еще не готова к вводу данных.

Тестовый набор и связанный код выглядит следующим образом:

describe('cloud storage operations', function() { 
    var storage; 

    before(function (done) { 
     this.timeout(5000); 
     storage = AzureStorage.usingTable('TEST', done); 
    }); 

    after(function (done) { 
     storage.deleteTable(done); 
    }); 

    it('should store without trouble', function (done) { 
     storage.save(factory.createChangeSet()).then(done, done); 
    }); 
}); 

... // отрезала от azure.js

var AzureStorage = function (storageClient, tableName, callback) { 
    assert(storageClient && tableName && partitionKey, "Missing parameters"); 

    this.storageClient = storageClient; 
    this.tableName = tableName; 

    var defaultCallback = function (err) { if (err) { throw error; } }; 

    this.storageClient.createTableIfNotExists(this.tableName, function() { 
     callback(); 
    } || defaultCallback); 
    }; 

    AzureStorage.usingTable = function (tableName, callback) { 
    return new AzureStorage(
     azure.createTableService(accountName, accountKey) 
     , tableName 
     , callback 
    ); 
    }; 

AzureStorage.prototype.deleteTable = function (callback) { 
    this.storageClient.deleteTable(this.tableName, callback); 
}; 

ответ

1

Я ударил это с помощью C# библиотеки как хорошо, но Я уверен, что сообщение об ошибке показало, что таблица не может быть создана, поскольку операция все еще выполняется для таблицы с тем же именем. Размышляя о поддержке бэкэнда, важно иметь в виду, что это не мгновенно. Стол должен быть удален из трех локальных реплик, а также реплик в парном центре обработки данных.

С такой асинхронной операцией будет сложно создавать слезы, чтобы они были достаточно быстрыми для испытаний.

Обходным путем может быть увеличение значения, добавленного к имени таблицы «ТЕСТ», которое было бы уникальным для этого тестового прогона.

+0

Хммм. Я действительно не вижу, как изменение имени таблицы должно влиять на операции, НО ЭТО ДЕЛАЕТ. Таким образом, ваше обходное решение действительно работает. Я изменил код установки для использования \t \t \t \t \t \t 'хранения = AzureStorage.usingTable («TEST»+ Date.now(), сделано);' – oligofren

+0

Когда я прочитал это работает каждый другой раз, я понял, что быть работал в первый раз, но не второй. Именно там поможет уникальное имя. Если он не работает в первый раз, но, проходя второй, обходной путь, вероятно, не решает проблему. –

Смежные вопросы