0

Express node.jsプロジェクトを介してユニットテストをBackboneモデルと統合しようとしていますが、このタスクを実行する方法を正確に把握するのに苦労しています。(補足:私は多くのJavaのバックグラウンドを持っており、違いがあることを認識していますが、これまでのところ、ノード開発環境のシンプルさと優雅さが大好きです。)

私の問題は次の問題に起因します。バックボーンモデルをブラウザ内で実行するには、ブラウザに公開する必要がありますが、mochaによるテストは、ノードランタイム環境では「サーバー側」です。

これが私が話していることの例です:

モデルファイル:/public/js/backbone/models.js

var SomeModel = Backbone.Model.extend({...});

サーバーサイドテスト:/test/backbone/models-test.js

???

私は書きます ???サーバー側を介した通常の単体テストは、次のようにするだけです。

var SomeModule = require('./someModule');

そして、あなたの陽気な道を進んでください。明らかに、ブラウザはNode内で実行されていないため、モジュールはすぐには利用できません。

ブラウザ側のjavascriptをrequire.js内にラップする必要があるという投稿をいくつか読みました。これにより、これらのjavascriptファイルがノードの名前空間に自動的に配置され、requireを実行してテストを続行できるようになります。しかし、私はそのようなタスクを達成するための首尾一貫した方法を見つけられず、例を探し回ってみましたが、当てはまるものを見つけることができないようです。確かに、JavaScriptでスコープを設定する方法、依存関係の挿入などのアイデア全体に頭を悩ませているので、このフレームワークに関する一般的な知識が不足している可能性があります。

どんな助けでも大歓迎です、そしてこの質問がすでに百万回尋ねられたならば、私はそれが確かにあると確信しています、そして私はそれを間違った方法で尋ねています。

前もって感謝します。

4

1 に答える 1

5

ノードのみのコードがある場合(ノードの下でのみ実行することを計画している場合の単体テストなど)、次のアプローチを取ることができます。

  • npmインストールバックボーン
  • var Backbone = require('backbone');
  • NPMから取得するバックボーンのバージョンが、ブラウザーに送信するバージョンと同じであることを確認してください。public/js/backbone.js必要に応じて、下のファイルにシンボリックリンクすることもできnode_moules/backbone/backbone.jsます。

ブラウザのみのコードを使用している場合は、必要に応じてBackboneグローバル変数またはそのrequire.jsシムバージョンを使用できます。

ブラウザで実行したいがノードでも機能するコード(モデルなど)がある場合、最もクリーンな解決策は、CommonJS(ノード)スタイルを使用しvar Backbone = require('backbone');てコーディングし、ノードでそのように実行することですが、requirejsでラップします/ AMDラッパーをブラウザーに送信し、require.configrequire.pathsを使用して「バックボーン」をbackbone.jsファイルにマップする場合。

この非常に人気のある質問/回答の詳細:

https://stackoverflow.com/a/10914666/266795

参照:

http://backbonetutorials.com/organizing-backbone-using-modules/

于 2012-12-20T22:20:33.307 に答える