2015-09-24 4 views
2

У меня самая странная проблема и надеюсь, что кто-то еще это видел и может даже исправить.grunt.file.readJSON с одним элементом

Раньше у меня в файле grunt.js был набор параметров для использования в моих тестах транспортира. Простой пример ниже:

params: { 
    userId: "abc", 
    someData: ["abc"] 
} 

И это не сработало. Затем, когда мои данные росли, я чувствовал, что их экстернализация в другом файле будет лучше, поэтому я сделал и загрузил файл с помощью grunt.file.readJSON.

params: grunt.file.readJSON('my/external/file.json'); 

И содержимое файла:

{ 
    "userId": "abc", 
    "someData": ["abc"] 
} 

Проверка на params.userId отлично работает. Однако, если я проверю длину params.someData, я получаю длину 3 вместо 1. Массив изменен. Однако, если я сделаю еще одно изменение для некоторых данных как таковых:

{ 
    "userId": "abc", 
    "someData": ["abc", "def"] 
} 

Затем массив показывает два элемента, как ожидалось. Есть идеи? Как сохранить массив одиночных элементов со строкой?

+0

Это нормально, когда я проверяю его. 'grunt.file.readJSON' просто делает' JSON.parse' содержимое содержимого файла, поэтому не должно быть что-то, связанное с разбором файлов. Does 'grunt.file.readJSON ('my/external/file.json')' возвращает вам плохие данные или он поврежден позже? –

+0

Кроме того, вы используете 'grunt-protractor-runner'? –

+0

Да, я использую хрюк-транспортир-бегун. Он отображается поврежденным, когда я запускаю тест транспортира. Если я добавлю 'console.log()' в загруженные данные, я вижу проблему. Странно, что была другая область, в которой у меня возникла проблема с вытаскиванием содержимого объекта: '{label:" a ", description:" abc "}' В транспортнике, когда я 'console.log'ed вне кода я бы получил массив, который всегда был бы равен '[object Object]'. Очевидно, я вижу, что происходит. Я просто не знаю, почему и как это исправить. – jonbcampos

ответ

1

Как вы можете видеть из комментариев, спасибо Майклу Радионову, это основано на перехвате хрюка-транспортера, изменяя параметры в переменных командной строки. Тем не менее все становится строкой. Это, по касательной, также был затронут в этой StackOverflow д & а:

How can I use command line arguments in Angularjs Protractor?

И в этом хрюкать-транспортир-бегун выпуска»

https://github.com/teerapap/grunt-protractor-runner/issues/130

быстрое решение, которое вам «Я собираюсь ненавидеть - я знаю, что знаю, это изменить ваш json, а затем разобрать json в файле вашего транспортира как такового.

Это:

someObj.data = ["abc"] 

становится:

someObj.data = "[\"abc\"]" 

Теперь в вашем транспортира файл, который вы только распаковываете данные:

var myArray = JSON.parse(someObj.data); 

И вы будете иметь ожидаемые данные.

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