What is the equivalent of Java's System.out.println() in Javascript?
Asked Answered
V

8

20

I am writing some tests for Javascript code and I need to dump some messages during the compile process when errors are encountered.

Is there any equivalent to Java's System.out.println() in Javascript?

P.S.: I also need to dump debug statements while implementing tests.

UPDATE

I am using a maven plugin on a file containing all merged tests:

        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <version>1.1</version>
            <executions>
                <execution>
                <phase>test</phase>
                <goals>
                    <goal>java</goal>
                </goals>
                </execution>
            </executions>
            <configuration>
                <mainClass>org.mozilla.javascript.tools.shell.Main</mainClass>
                <arguments>
                    <argument>-opt</argument>
                    <argument>-1</argument>
                    <argument>${basedir}/src/main/webapp/html/js/test/test.js</argument>
                </arguments>
            </configuration>
        </plugin>

UPDATE II

I tried console.log("..."), but I get:

js: "src/main/webapp/html/js/concat/tests_all.js", line 147:
uncaught JavaScript runtime exception: ReferenceError: "console" is not defined

The code I am testing is a set of functions (like in a library). I am using QUnit.

Voluminous answered 4/1, 2012 at 19:59 Comment(0)
R
30

Essentially console.log("Put a message here.") if the browser has a supporting console.

Another typical debugging method is using alerts, alert("Put a message here.")

RE: Update II

This seems to make sense, you are trying to automate QUnit tests, from what I have read on QUnit this is an in-browser unit testing suite/library. QUnit expects to run in a browser and therefore expects the browser to recognize all of the JavaScript functions you are calling.

Based on your Maven configuration it appears you are using Rhino to execute your Javascript at the command line/terminal. This is not going to work for testing browser specifics, you would likely need to look into Selenium for this. If you do not care about testing your JavaScript in a browser but are only testing JavaScript at a command line level (for reason I would not be familiar with) it appears that Rhino recognizes a print() method for evaluating expressions and printing them out. Checkout this documentation.

These links might be of interest to you.

QUnit and Automated Testing

JavaScript Unit Tests with QUnit

Ricker answered 4/1, 2012 at 20:1 Comment(15)
If the browser doesn't have a console then it's a crappy browser (for debugging).Muskrat
@Rocket I would agree, hopefully most of those no longer exist but it was definitely a problem before. Furthermore those crappy browsers were the ones you had to do the most debugging on!Ricker
I know IE wouldn't have a console object unless you opened the debugging tools, then it would add it. But that's because IE is stupid.Muskrat
Note only ie < 8 dont have console.log, the developer tools in ie8 have console.log as well.Rafaello
@Rocket Which mobile browser has a console and how do I read it?Aileen
@Voo: Mobile browser? Is this iOS or Android (or something else)? I know on Android, if you use the built-in browser console.log messages are sent to the system log, which can be read with logcat (or adb) or with a app from the market, such as: CatLog.Muskrat
I tried the proposed solution, but it did not work. I have updated my question.Panacea
@Aileen on iOS... Settings > Safari > Advanced > Debug ConsoleRicker
@JVerstry check out my update, I hope that helps point you in the right direction.Ricker
Indeed, I do use Rhino. No worry about browsers specifics, the methods I implement don't rely on browsers' specific, they just convert / tranform data. I am coming to Javascript with my Java JUnit mentality...Panacea
If you mean 'calling without a parameter', then the answer is yes. It prints an empty line.Panacea
@Rock Good to know thanks - had to debug only once some mobile specific problem and found it easier to just pepper the code with some alerts - but good to know that we can log it.Aileen
@JVerstry Ok, so how about printing what you wanted to print? print("Hello world")? Does this answer your question?Ricker
Well, yes, that's what I found out by myself yesterday. See the solution I created.Panacea
Hmm, ok I suppose I didn't see you posted a solution, please point that out in the comments next time.Ricker
V
4

I found a solution:

print("My message here");
Voluminous answered 4/1, 2012 at 20:21 Comment(0)
L
4

I'm using Chrome and print() literally prints the text on paper. This is what works for me:

document.write("My message");
Laraelaraine answered 23/9, 2013 at 7:19 Comment(0)
A
2

console.log().

Chrome, Safari, and IE 8+ come with built-in consoles (as part of a larger set of development tools). If you're using Firefox, getfirebug.com.

Andesite answered 4/1, 2012 at 20:0 Comment(1)
I tried the proposed solution, but it did not work. I have updated my question.Panacea
C
0

There isn't one, at least, not unless you are using a "developer" tool of some kind in your browser, e.g. Firebug in Firefox or the Developer tools in Safari. Then you can usually use console.log.

If I'm doing something in, say, an iOS device, I might add a <div id="debug" /> and then log to it.

Copybook answered 4/1, 2012 at 20:2 Comment(2)
Good strategy, iOS devices do have a console though, you enable it via Settings > Safari > Advanced > Debug ConsoleRicker
Cool beans @ChrisWagner, I didn't know that!Copybook
L
0

You can always simply add an alert() prompt anywhere in a function. Especially useful for knowing if a function was called, if a function completed or where a function fails.

alert('start of function x');
alert('end of function y');
alert('about to call function a');
alert('returned from function b');

You get the idea.

Louielouis answered 4/1, 2012 at 20:18 Comment(2)
Yes, it could work, but when running the compile process multiple times, I would have to close each alert -> A bit impractical for me...Panacea
right - I can see where that would be a little impractical. I used FireBug a bit, seems it has what you are looking for getfirebug.com/loggingLouielouis
S
0

I'm also about to ask the same question. But from what I've learned from codeacademy.com below code is enough to display the output or text?

print("hello world")  
Swallow answered 5/1, 2012 at 21:51 Comment(0)
C
0

In java System.out.println() prints something to console. In javascript same can be achieved using console.log().

You need to view browser console by pressing F12 key which opens developer tool and then switch to console tab.

Convergence answered 9/4, 2019 at 13:47 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.