 rogervinas
       / 
        tests-everywhere
      
        rogervinas
       / 
        tests-everywhere
      
    
    🤠 Tests, Tests Everywhere!
JavaScript testing this simple Hello World with Jest
Show me the code
Implementation
- Create HelloMessageclass in HelloMessage.js:
class HelloMessage {
  text = "Hello World!";
}
- Create HelloConsoleclass in HelloConsole.js:
class HelloConsole {
  print(text) {
    console.log(text);
  }
}
- Create HelloAppclass in HelloApp.js:
class HelloApp {
  constructor(helloMessage, helloConsole) {
    this.helloMessage = helloMessage;
    this.helloConsole = helloConsole;
  }
  printHello() {
    this.helloConsole.print(this.helloMessage.text);
  }
}
- Create main function in Main.js that wraps it all together:
const HelloMessage = require("./HelloMessage");
const HelloConsole = require("./HelloConsole");
const HelloApp = require("./HelloApp");
const message = new HelloMessage();
const console = new HelloConsole();
const app = new HelloApp(message, console);
app.printHello();
Test
Following Jest > Getting Started guide ...
- Test HelloMessagein HelloMessage.test.js:
describe("HelloMessage", () => {
  it("should return hello world", () => {
    const message = new HelloMessage();
    expect(message.text).toBe("Hello World!");
  });
});
- Test HelloAppin HelloApp.test.js:
// 2.1 Mock ./HelloMessage module
jest.mock("./HelloMessage");
// 2.2 Mock ./HelloConsole module
jest.mock("./HelloConsole");
describe("HelloApp", () => {
  it("should print hello message", () => {
    const messageText = "Hello Test!";
    // 2.3 Set mock implementation to be returned
    // anytime new HelloMessage() is called
    HelloMessage.mockImplementation(() => {
      return {
        text: messageText,
      };
    });
    // 2.4 Create a HelloMessage
    // that will be a mock thanks to 2.1 and 2.2
    const message = new HelloMessage();
    // 2.5 Create a HelloConsole
    // that will be a mock thanks to 2.3
    const console = new HelloConsole();
    // 2.6 Create a HelloApp, the one we want to test, passing the mocks
    const app = new HelloApp(message, console);
    // 2.7 Execute the method we want to test
    app.printHello();
    // 2.8 Verify HelloConsole mock print() method
    // has been called once with "Hello Test!"
    expect(console.print).toHaveBeenCalledTimes(1);
    expect(console.print).toHaveBeenCalledWith(messageText);
  });
});
- Test output should look like:
> jest
 PASS  ./HelloMessage.test.js
 PASS  ./HelloApp.test.js
Test Suites: 2 passed, 2 total
Tests:       2 passed, 2 total
Snapshots:   0 total
Time:        1.229 s
Ran all test suites.
Happy Testing! 💙
 
 
              
 
    
Top comments (0)