Commit d7c9fca

mo <mo.khan@gmail.com>
2018-04-09 17:37:31
use jasmine fixture to write js controller spec.
1 parent 6fc3707
Changed files (4)
spec/javascripts/controllers/sessions.spec.js
@@ -1,19 +1,34 @@
 import SessionsController from '../../../app/javascript/controllers/sessions_controller'
+import { Application } from 'stimulus';
 
 describe('SessionsController', () => {
-  let subject = null;
-
   beforeEach(() => {
-    subject = new SessionsController();
-  });
-
-  it("is alive", () => {
-    expect(subject).toEqual(jasmine.any(SessionsController));
+    let $form = affix('form[data-controller="sessions"]')
+    $form.affix('input[data-target="sessions.email" data-action="keyup->sessions#validate" type="email" id="user_email"]')
+    $form.affix('input[data-target="sessions.password" data-action="keyup->sessions#validate" type="password" id="user_password"]')
+    $form.affix('button[name="button" type="submit" data-target="sessions.submit"]')
+    const stimulusApp = Application.start();
+    stimulusApp.register('sessions', SessionsController);
   });
 
   describe("validate", () => {
-    xit("disables the submit button when the email is blank", () => {
-      subject.validate();
+    it("disables the submit button when the email is blank", () => {
+      $('#user_email').val('')
+      document.getElementById('user_email').dispatchEvent(new Event('keyup'))
+      expect($('button[type="submit"]').attr('disabled')).toBe('disabled')
+    });
+
+    it("disables the submit button when the password is blank", () => {
+      $('#user_password').val('');
+      document.getElementById('user_password').dispatchEvent(new Event('keyup'))
+      expect($('button[type="submit"]').attr('disabled')).toBe('disabled')
+    });
+
+    it ("enables the submit button when all fields are provided", () => {
+      $('#user_email').val('email@example.com');
+      $('#user_password').val('password');
+      document.getElementById('user_password').dispatchEvent(new Event('keyup'))
+      expect($('button[type="submit"]').attr('disabled')).toBe(undefined)
     });
   });
 });
karma.conf.js
@@ -5,7 +5,11 @@ module.exports = function(config) {
   config.set({
     basePath: '',
     frameworks: ['jasmine'],
-    files: [ 'spec/javascripts/**/*.spec.js' ],
+    files: [
+      'spec/javascripts/**/*.spec.js',
+      'node_modules/jquery/dist/jquery.min.js',
+      'node_modules/jasmine-fixture/dist/jasmine-fixture.min.js'
+    ],
     exclude: [ ],
     preprocessors: {
       'app/javascript/packs/*.js': ['webpack', 'sourcemap'],
package.json
@@ -17,9 +17,11 @@
     "babel-preset-env": "^1.6.1",
     "jasmine": "^3.1.0",
     "jasmine-core": "^3.1.0",
+    "jasmine-fixture": "^2.0.0",
     "karma": "^2.0.0",
     "karma-chrome-launcher": "^2.2.0",
     "karma-jasmine": "^1.1.1",
+    "karma-jquery": "^0.2.2",
     "karma-mocha-reporter": "^2.2.5",
     "karma-sourcemap-loader": "^0.3.7",
     "karma-webpack": "^3.0.0",
yarn.lock
@@ -3695,6 +3695,10 @@ jasmine-core@^3.1.0, jasmine-core@~3.1.0:
   version "3.1.0"
   resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-3.1.0.tgz#a4785e135d5df65024dfc9224953df585bd2766c"
 
+jasmine-fixture@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/jasmine-fixture/-/jasmine-fixture-2.0.0.tgz#b6d0c5a3bb4834d23dd137464ef96f04f93bbd60"
+
 jasmine@^3.1.0:
   version "3.1.0"
   resolved "https://registry.yarnpkg.com/jasmine/-/jasmine-3.1.0.tgz#2bd59fd7ec6ec0e8acb64e09f45a68ed2ad1952a"
@@ -3814,6 +3818,10 @@ karma-jasmine@^1.1.1:
   version "1.1.1"
   resolved "https://registry.yarnpkg.com/karma-jasmine/-/karma-jasmine-1.1.1.tgz#6fe840e75a11600c9d91e84b33c458e1c46a3529"
 
+karma-jquery@^0.2.2:
+  version "0.2.2"
+  resolved "https://registry.yarnpkg.com/karma-jquery/-/karma-jquery-0.2.2.tgz#6bee93454d8b096bcc7815570a81e73fdddb5d6f"
+
 karma-mocha-reporter@^2.2.5:
   version "2.2.5"
   resolved "https://registry.yarnpkg.com/karma-mocha-reporter/-/karma-mocha-reporter-2.2.5.tgz#15120095e8ed819186e47a0b012f3cd741895560"