###Definitely, not in a single file.

We are using Protractor as well and have a large test codebase and I think, we've learned a lot of lessons along the way. What is working for us are the following principles:

 * use [Page Object pattern][1] to abstract away the elements and blocks of a page building a convenient API for your tests to use
 * put page objects to under `po` directory, specs to under `specs` organized using inner directories per screen or per feature. Here is our current directory structure:

        /config
        /helpers  (a collection of helper methods and internal testing utilities)
        /po
            /dashboard.po
                index.js
                filters.po.js
            profile.po.js
        /specs
            /dashboard
                /validation
                defaultView.spec.js
            /exportToExcel
                ...   
 
 Note how we are defining some page objects as "node packages" in directories with `index.js` and "child" page objects. We are also using `requirePO` and `requireHelper` functions to ease importing page objects and helpers inside tests, suggested [here][2].
 
 * follow [Protractor's Style Guide][3]
 * one test file should cover one particular block of functionality - it should be easy to set the `describe` description in one sentence without using "and" ("and" is usually a sign that you are trying to test two or more different things)
 * aim to *one assertion per test* - this is not always achievable and does not always make sense, but most of the times this helps to avoid testing too many things in a single test
 * if you are nesting `describe` blocks into each other - this is a strong sign of over-complicating this particular test. See if you are better off creating separate test files. **"Flat is better than nested."** (from the ["Zen of Python"][4])
 * we also had success in using [`jasmine-data-provider`][5] that allows to "multiply" and parameterize tests
 * enforce Style Guide and other rules with *static code analysis* (we've been using [`ESLint`][6], [`eslint-plugin-jasmine`][7] and [`eslint-plugin-protractor`][8] plugins)
 * group tests into logical groups with [`suites`][9] 


  [1]: https://martinfowler.com/bliki/PageObject.html
  [2]: https://stackoverflow.com/q/31491952/771848
  [3]: http://www.protractortest.org/#/style-guide
  [4]: https://www.python.org/dev/peps/pep-0020/
  [5]: https://www.npmjs.com/package/jasmine-data-provider
  [6]: https://eslint.org/
  [7]: https://www.npmjs.com/package/eslint-plugin-jasmine
  [8]: https://github.com/alecxe/eslint-plugin-protractor
  [9]: https://stackoverflow.com/questions/30331018/suites-vs-specs-protractor