0

Jasmineでユニットテストをしています。私はmodule.exportsrequireを使用して仕様に正常に注入されたモジュールgetContactsを持っています。私はモジュール自体にアクセスできますが、モジュールメソッドは未定義に戻っているため、ユニットとしてテストすることはできません。以下は、モジュールのコードです:Jasmineを使用してjsモジュールのアクセス方法を個別にテストできるようにする

var getContacts = function() { 

    var GetContacts = this; 
    var contacts = require('nativescript-contacts'); 
    var model = require("../main-view-model"); 

    GetContacts.init = (function() { 
     var self = this; 
     contacts.getContact().then(function(args){ 
      self.makeName(args.data); 
      self.getPhoneNumber(args.data); 
     }).catch(function(e) { 
      console.log("promise \"contacts.getContact()\" failed with" + e.stack + "\n" + "value of self:" + " " + self) 
     }); 
    }()); 

    GetContacts.getPhoneNumber = function(data) { 
     if(data.phoneNumbers.length > 0){ 
      model.phone = data.phoneNumbers[0]; 
     } 
    }; 

    GetContacts.makeName = function(data) { 
     if(data.name.displayname) { 
      model.contactName = data.name.displayname; 
     } 
     else { 

     } 
     model.contactName = data.name.given + " " + data.name.family; 
    }; 
}; 

module.exports = getContacts; 

とspecファイル:

describe("getContacts", function() { 
    "use strict"; 

    var contacts, model, getContacts, data; 

    beforeEach(function() { 
     contacts = require('nativescript-contacts'); 
     model = require("../main-view-model"); 
     getContacts = require('../src/getContacts.js'); 

     data = { 
      "data": { 
       "name": { 
        "given": "John", 
        "middle": "Peter", 
        "family": "Smith", 
        "prefix": "Mr.", 
        "suffix": "Jr.", 
        "testEmptyObject": {}, 
        "testEmptyString": "", 
        "testNumber": 0, 
        "testNull": null, 
        "testBool": true, 
        "displayname": "John Smith", 
        "phonetic": { 
         "given": null, 
         "middle": null, 
         "family": null 
        } 
       } 
      }, 
      "response": "selected" 
     } 
    }); 

    it("Gets the display name as contact name if display name is a string with length", function() { 
     expect(getContacts.makeName(data)).toBe("John Smith"); 
    }); 

}); 

テストがエラーで失敗します。

getContacts.makeName is not a function

と確かにそれはundefinedを返しログイン。ログgetContactsは、コンソール全体にgetContacts関数を出力します。 makeNameとその他の方法にアクセスするにはどうすればいいですか?

答えて

1

必要なコード無名関数をラップすることなく再構築される。モジュール自体が分離を作成するので、必要ないと思います。以下は、動作したコードです:

var contacts = require( 'nativescript-contacts'); var model = require( "../ main-view-model");

var GetContacts = { 

    init: function() { 
     var self = this; 
     contacts.getContact().then(function(args){ 
      model.contactName = self.makeName(args.data); 
      model.phone = self.getPhoneNumber(args.data); 
     }).catch(function(e) { 
      console.log("promise \"contacts.getContact()\" failed with" + e.stack + "\n" + "value of self:" + " " + self) 
     }); 
    }, 

    getPhoneNumber: function(data) { 
     if(data.phoneNumbers.length > 0){ 
      return data.phoneNumbers[0]; 
     } 
    }, 

    makeName: function(data) { 
     if(data.name.displayname) { 
      return data.name.displayname; 
     } 
     else { 
     } 
    } 

}; 

module.exports = GetContacts;

0

機能機能が何かを行いますが、その中のコードをさらに参照を知っているので、以下のような関数の最後にリターンを追加しようとしませんので、何も返しません。)

var getContacts = function() { 

    var GetContacts = this; 

    /* 
    rest of code 
    */ 

    GetContacts.makeName = function(data) { 
     if(data.name.displayname) { 
      model.contactName = data.name.displayname; 
     } 
     else { 
     } 
     model.contactName = data.name.given + " " + data.name.family; 
    }; 

    //add return to export content of function 
    return GetContacts; 
}; 
+0

私はこれを試しましたが、私は同じ結果を得ます – HelloWorld

関連する問題